java HttpClient提交post 请求时 MultipartEntity与UrlEncodedFormEntity请求实体的区别
主要是MultipartEntity与UrlEncodedFormEntity参数不同
经过在网上查询资料发现,这两个类均实现了HttpEntity接口,而二者的区别就和html表单有关系,
html中的form 表单有两种:除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的 类型为multipart/form-data。 后者主要是用来上传文件所用
UrlEncodeFormEntity 用于不包含文件上传的表单,以NameValuePair键值对的形式来使用
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
- NameValuePair pair1 = new BasicNameValuePair("supervisor", supervisorEt.getEditableText().toString());
- NameValuePair pair2 = new BasicNameValuePair("content", superviseContentEt.getEditableText().toString());
- NameValuePair pair3 = new BasicNameValuePair("userId", String.valueOf(signedUser.getId()));
- pairs.add(pair1);
- pairs.add(pair2);
- pairs.add(pair3);
- httpPost.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8))
MultipartEntity 可以上传一个或多个文件
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null,Charset.forName("UTF-8"));
reqEntity.addPart(Constans.FILE_BODY, new FileBody(new File("C://1.txt"));
//ContentBody body = new InputStreamBody(new FileInputStream(file),file.getName());
这种方式提交参数
addPart的第二个参数为ContentBody
FileBody,FileIputStreamBody,ByteArrayBody均可以作为参数传入,可见HttpCLient支持文件,文件流,字节数组的方式向后台
总结:
本次开发 让我更加理解Http协议, post文件的方式是写入请求的报文实体(reqEntity),