MultipartEntityBuilder
Multipart的具体含义可参考博文,或者RFC2046,HttpClient提供的MultipartEntityBuilder类是对此规范的具体实现。如下图所示,最重要的属性有三个:
- contentType:即HTTP请求头CONTENT_TYPE的值,默认为multipart/form-data;
- boundary:分隔符边界,默认会自动生成随机字符串;
- bodyParts:若干part;
FormBodyPart
每个part的具体实现类,同样包含三个重要属性:
- name:part的名称;
- header:每个part的元数据,主要指CONTENT_DISPOSITION和CONTENT_TYPE;
- body:即待发送的数据;
ContentBody
ContentBody表示part中具体的数据,如下图所示有四个实现类,分表代表了不同的数据类型,最终都会被转成流发送出去。
使用示例
HttpPost httpPost = new HttpPost(url);
//Step1:创建MultipartEntityBuilder实例
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
//Step2:初始化,设置各种属性
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//Step3:添加part
builder.addBinaryBody(streamKey, inputStream, ContentType.DEFAULT_BINARY, fileName);
//Step4:转化为消息体
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
参考: