java+addbinarybody_HttpClient使用MultipartEntityBuilder实现多文件上传

本文介绍了如何使用Java的HttpClient4.3及以上版本,通过MultipartEntityBuilder实现多文件上传。主要步骤包括设置上传模式、创建MultipartEntityBuilder对象并添加文件、构建HttpEntity、设置到HttpPost中并发送请求。详细讲解了MultipartEntityBuilder的主要方法,以及Android端和服务器端的核心代码实现。最后提供了一个简单的示例代码。
摘要由CSDN通过智能技术生成

一、MultipartEntityBuilder 实现文件上传步骤

在HttpCient4.3之后上传文件主要使用的类是位于org.apache.http.entity.mime下的MultipartEntityBuilder(原先的MultipartEntity已经基本弃用了)基本实现步骤如下:

1.设置上传的模式;

setMode(HttpMultipartMode mode),其中mode主要有BROWSER_COMPATIBLE,RFC6532,STRICT三种,默认值是STRICT。

2.创建MultipartEntityBuilder对象,并添加需要上传的数据;

a.利用MultipartEntityBuilder.create()来创建对象;

b.addBinaryBody:以二进制的形式添加数据,可以添加File、InputStream、byte[]类型的数据。

addBinaryBody(String name, File file, ContentType contentType, String filename)

addBinaryBody(String name, InputStream stream, ContentType contentType, String filename)

addBinaryBody(String name, byte[] b, ContentType contentType, String filename)

c.addTextBody:添加文本数据

addTextBody(String name, String text, ContentType contentType)

d.addPart:以Key/Value的形式添加ContentBody类型的数据

addPart(String name, ContentBody contentBody)

测试中选用了addBinaryBody。其中,第一个参数name的值,是服务器已经定义好的,服务器会根据这个字段来读取我们上传的文件流,不匹配则会报错。关于contentType,可以参考:http://tool.oschina.net/commons,不同文件扩展名所对应的类型。而file/stream和fileName,就是我们所要上传文件的信息。当用浏览器的开发者工具查看API请求时,我们会看到这些/参数基本位于API请求中的 Request Payload字段。29092844_XFk2.jpg

3.利用build()方法创建一个HttpEntity对象;

4.HttpEntity对象添加到指定的URL上,采用HttpPost的setEntity的方法;

5.最后调用HttpClient对象发送请求,并获取服务器的响应。29092844_mFDI.jpg

在HttpCient4.3之前上传文件主要使用MultipartEntity这个类,但现在这个类已经不在推荐使用了。随之替代它的类是MultipartEntityBuilder。

二、MultipartEntityBuilder类介绍

MultipartEntityBuilder这个类主要用于创建HttpEntity。它的主要方法有:

修饰符和类型

方法和描述

MultipartEntityBuilder

addBinaryBody(String name, byte[] b)

将字节数组以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, byte[] b, ContentType contentType, String filename)

将字节数组以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, File file)

将文件以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, File file, ContentType contentType, String filename)

将文件以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream)

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream, ContentType contentType, String filename)

将输入流以二进制的形式添加数据。

MultipartEntityBuilder

addPart(String name, ContentBody contentBody)

添加ContentBody 类型的数据。

MultipartEntityBuilder

addTextBody(String name, String text)

添加文本数据。

MultipartEntityBuilder

addTextBody(String name, String text, ContentType contentType)

以指定的内容类型添加文本数据。

HttpEntity

build()

创建一个HttpEntity。

static MultipartEntityBuilder

create()

创建一个MultipartEntityBuilder对象。

<
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Apache HttpClientMultipartEntityBuilder来发送form-data格式的文件。下面是一个示例代码: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.HttpClientBuilder; import java.io.File; import java.io.IOException; public class FormDataExample { public static void main(String[] args) { // 创建HttpClient实例 HttpClient httpClient = HttpClientBuilder.create().build(); // 创建HttpPost请求 HttpPost httpPost = new HttpPost("http://example.com/upload"); // 创建MultipartEntityBuilder MultipartEntityBuilder builder = MultipartEntityBuilder.create(); // 添加文件参数 File file = new File("path/to/file"); builder.addBinaryBody("file", file); // 构建HttpEntity对象 HttpEntity entity = builder.build(); // 将HttpEntity对象设置到HttpPost请求中 httpPost.setEntity(entity); try { // 发送HttpPost请求并获取响应 HttpResponse response = httpClient.execute(httpPost); // 处理响应 // ... } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例中,你需要将`http://example.com/upload`替换为你要发送请求的URL。同时,将`path/to/file`替换为要上传的文件的路径。 这样,你就可以使用HttpClientMultipartEntityBuilder来发送form-data格式的文件了。记得在使用HttpClient时,要注意关闭连接或使用连接池来管理连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值