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>();  

  1. NameValuePair pair1 = new BasicNameValuePair("supervisor", supervisorEt.getEditableText().toString());  
  2. NameValuePair pair2 = new BasicNameValuePair("content", superviseContentEt.getEditableText().toString());  
  3. NameValuePair pair3 = new BasicNameValuePair("userId", String.valueOf(signedUser.getId()));  
  4. pairs.add(pair1);  
  5. pairs.add(pair2);  
  6. pairs.add(pair3);  
  7. 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),

原文地址:https://www.cnblogs.com/lilefordream/p/5241046.html