httpclient 上传文件一些问题

网上也有很多关于httpclient 上传文件的内容,基本内容都差不多,试了多种方法,一开始File类型通过类似下方处理不行,后面有改成MultipartFile类型,也不行,传到过去file一直是null;

MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
 multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));    multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
   multipartEntityBuilder.addBinaryBody('file',file.getInputStream(), ContentType.MULTIPART_FORM_DATA, file.getOriginalFilename());
   httpPost.setEntity(multipartEntityBuilder);

又改了请求头,一开始是这样的

httpPost.setHeader("Content-Type", "multipart/form-data);

提示:Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found;
百度了下,说是去掉,去掉后就一直传到过去file一直是null;

后面改成请求头改成下面这样

httpPost.setHeader("Content-Type", "multipart/form-data; boundary=XnwR6DgMazZmZ4a7w5dt_wrCvcjupAetcV8Ccx; charset=UTF-8");

不再出现FileUploadException的错误,但还是过去file是null;
这里header将boundary内容写死了,其实在file放到Entity里,请求头就已经加好了,还是需要手动再设置一次;不过还需加上项目的header,不然httpPost.getEntity().getContentType()会是空指针;
最后请求头这样设置,file就正常传过去;希望对大家有帮助。

httpPost.setHeader("Content-Type", "multipart/form-data; boundary=XnwR6DgMazZmZ4a7w5dt_wrCvcjupAetcV8Ccx; charset=UTF-8");
httpPost.setHeader(httpPost.getEntity().getContentType());
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 HttpClient 的 `UrlEncodedFormEntity` 类来设置 POST 请求的参数。 以下是一个示例代码: ```java import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.client.methods.CloseableHttpResponse; import java.util.ArrayList; import java.util.List; public class HttpClientExample { public static void main(String[] args) throws Exception { // 创建 HttpClient 对象 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建 HttpPost 对象 HttpPost httpPost = new HttpPost("http://example.com"); // 设置 POST 请求参数 List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair("param1", "value1")); params.add(new BasicNameValuePair("param2", "value2")); httpPost.setEntity(new UrlEncodedFormEntity(params)); // 发送 POST 请求 CloseableHttpResponse response = httpClient.execute(httpPost); // 处理响应 System.out.println(response.getStatusLine()); httpClient.close(); } } ``` 在这个示例中,我们创建了一个 `HttpPost` 对象,并设置了 POST 请求的 URL 和参数。然后我们使用 `httpClient` 对象发送这个请求,并处理响应。需要注意的是,`UrlEncodedFormEntity` 类将参数编码为 HTML 表单形式,而不是 JSON 或其他格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值