HttpClient 4 分段上传(Multipart Upload)

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(1573)   2023-03-28 11:29:14

1.概述

在本教程中,我们将演示如何使用HttpClient 4执行分段上传操作

我们将使用http://echo.200please.com作为测试服务器,因为它是公开的,它接受大多数类型的内容。

 

2.使用AddPart方法

让我们先看看MultipartEntityBuilder对象,以便将部分添加到Http实体,然后通过POST操作将其上传。

这是将部分添加到表示窗体的HttpEntity的通用方法。

例2.1。- 用两个文本部分和一个文件上传表格

File file = new File(textFileName);
HttpPost post = new HttpPost("http://echo.200please.com");
FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY);
StringBody stringBody1 = new StringBody("Message 1", ContentType.MULTIPART_FORM_DATA);
StringBody stringBody2 = new StringBody("Message 2", ContentType.MULTIPART_FORM_DATA);
// 
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("upfile", fileBody);
builder.addPart("text1", stringBody1);
builder.addPart("text2", stringBody2);
HttpEntity entity = builder.build();
//
post.setEntity(entity);
HttpResponse response = client.execute(post);

请注意,我们正在通过指定服务器使用的ContentType值来实例化File对象。

另请注意,addPart方法有两个参数,它们的作用类似于表单的键/值对。这些仅在服务器端实际期望并使用参数名称时相关 - 否则,它们会被忽略。

3.使用addBinaryBodyaddTextBody方法

创建多部分实体的更直接方式是使用addBinaryBodyAddTextBody方法。这些方法用于上传文本,文件,字符数组和InputStream对象。我们用简单的例子来说明如何。

例子3.1。- 上传文本和文本文件部分

HttpPost post = new HttpPost("http://echo.200please.com");
File file = new File(textFileName);
String message = "This is a multipart post";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("upfile", file, ContentType.DEFAULT_BINARY, textFileName);
builder.addTextBody("text", message, ContentType.DEFAULT_BINARY);
// 
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);

请注意,这里不需要FileBodyStringBody对象。

同样重要的是,大多数服务器不检查文本正文的ContentType,因此addTextBody方法可能会忽略ContentType值。

addBinaryBody API接受ContentType的 -但它可能只是从二进制主体和形式参数拿着文件的名称创建实体。如前一节所述,如果未指定ContentType值,则某些服务器将无法识别该文件。

接下来,我们将添加一个zip文件作为InputStream,而图像文件将被添加为File对象:

例3.2。- 上传 Zip文件,图像文件和文本部分

HttpPost post = new HttpPost("http://echo.200please.com");
InputStream inputStream = new FileInputStream(zipFileName);
File file = new File(imageFileName);
String message = "This is a multipart post";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();         
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody
  ("upfile", file, ContentType.DEFAULT_BINARY, imageFileName);
builder.addBinaryBody
  ("upstream", inputStream, ContentType.create("application/zip"), zipFileName);
builder.addTextBody("text", message, ContentType.TEXT_PLAIN);
// 
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);

请注意,可以即时创建ContentType值,就像上面的zip文件示例一样。

最后,并不是所有的服务器都确认InputStream部分。我们在代码的第一行实例化的服务器识别InputStream

现在让我们看看addBinaryBody直接与字节数组一起工作的另一个示例:

例3.3。- 上传字节数组和文本

HttpPost post = new HttpPost("http://echo.200please.com");
String message = "This is a multipart post";
byte[] bytes = "binary code".getBytes(); 
// 
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("upfile", bytes, ContentType.DEFAULT_BINARY, textFileName);
builder.addTextBody("text", message, ContentType.TEXT_PLAIN);
// 
HttpEntity entity = builder.build();
post.setEntity(entity);
HttpResponse response = client.execute(post);

注意ContentType - 它现在指定二进制数据。

4。总结

本文将MultipartEntityBuilder作为一个灵活的对象提供,它提供了多个API选项来创建多部分表单。

这些示例还展示了如何使用HttpClient上载类似于表单实体的HttpEntity

标签: httpclient Java
地址:https://www.leftso.com/article/401.html

相关阅读

HttpClient的RestTemplate - Java配置示例
Apache HttpClient 4.x 使用详解
httpclient4.5使用详解 httpclient 4.5 post传递json参数
在本教程中 - 我们将使用HttpClient 4进行POST - 首先使用授权,然后使用流畅的HttpClient API。最后 - 我们将讨论如何使用HttpClient上传文件。
HttpClient Basic Authentication基本认证,本教程将说明如何在Apache HttpClient 4上配置基本身份验证。
本文将展示如何使用“接受所有”SSL支持来配置Apache HttpClient 4。目标很简单 - 使用没有有效证书的HTTPS URL。
HttpClient 4 按照POST重定向请求,本快速教程将展示如何配置Apache HttpClient 4以自动遵循POST请求的重定向。
Apache httpclient4.5 GET/POST/PUT/OPTION/DELETE工具类
1.概述本教程将重点介绍如何使用Apache HttpClient 4发送自定义Cookie
java编程中采用Apache common.httpclient方式模拟POST请求