httpclient upload file
用httpclient upload上传文件时,代码如下:
HttpPost httpPost = new HttpPost(uploadImg); httpPost.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); httpPost.addHeader("Accept-Encoding", "gzip, deflate"); httpPost.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6"); httpPost.addHeader("Cache-Control", "max-age=0"); httpPost.addHeader("Connection", "keep-alive"); httpPost.addHeader("Content-Type", "multipart/form-data;"); File file = new File("/Users/xxx/Desktop/新建文件夹/1.jpg"); byte[] fileBytes = readInputStream(new FileInputStream(file)); byte[] imgBytes = Base64.encodeBase64(fileBytes); String img = new String(imgBytes); img = img.replace("\n", ""); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody("file", file, ContentType.create("image/jpeg"), file.getName()); HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse httpResponse = HttpClientBuilder.create().build().execute(httpPost); String responseStr = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); System.err.println(responseStr);
一直提示如下异常:
</pre></p><p><b>root cause</b> <pre>org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:990) org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310) org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334) org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115) org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:156) org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:139) org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1047) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:892) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) javax.servlet.http.HttpServlet.service(HttpServlet.java:650) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) com.shangou.trace.http.BraveServletFilterUtil.doFilter(BraveServletFilterUtil.java:54) com.shandiangou.member.session.SdgSessionFilter.doFilter(SdgSessionFilter.java:130) </pre></p><p><b>note</b> <u>The full stack trace of the root cause is available in the xqs logs.</u></p><HR size="1" noshade="noshade"><h3>xqs</h3></body></html>
原因在于设定了contentType的值。当为boundary设定了contentType后,server不知道boundary如何处理。
因此,删掉contentType的设定即可。