网上也有很多关于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());