java - Apache HttpPost 多个文件上传失败并出现服务器错误 - 缺少初始多部分边界
问题描述
我尝试使用 Apache Http 库上传多个文件。
compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.5.6'
这就是我上传文件的方式。
String url = "url";
File f1 = new File("file1");
File f2 = new File("file2");
HttpPost request = new HttpPost(url);
request.addHeader("Content-Type", "multipart/form-data");
request.addHeader("Authorization", "Basic abcd=");
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody fileBody1 = new FileBody(f1, ContentType.DEFAULT_TEXT);
FileBody fileBody2 = new FileBody(f2, ContentType.DEFAULT_TEXT);
multipartEntityBuilder.addPart("file_1_param", fileBody1);
multipartEntityBuilder.addPart("file_2_param", fileBody2);
HttpEntity httpEntity = multipartEntityBuilder.build();
request.setEntity(httpEntity);
HttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
if (entity == null) {
return;
}
InputStream is = entity.getContent();
String textResponse = InputStreamUtils.readText(is);
System.out.println(textResponse);
它打印。
<pre> Server Error</pre></p><h3>Caused by:</h3><pre>java.lang.RuntimeException: javax.servlet.ServletException: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: Missing initial multi part boundary
at com.ca.devtest.acl.servlet.filters.RemoteAuthenticationFilter.doFilter(RemoteAuthenticationFilter.java:285)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
如果我只上传一个文件,它会起作用!
请注意,这不是重复的。这些链接显示了有关服务器端问题的帖子。这个问题出在客户端。
解决方案
我找到了一个解决方案。我想与其他人分享它,因此您可以 1)学习如何上传文件和 2)注意 HTTP 标头。
当我附加FileBody
到MultipartEntityBuilder
它时会自动设置边界。我只是从代码中删除了这一行
request.addHeader("Content-Type", "multipart/form-data"); //Remove it
推荐阅读
- java - 禁用 PathVariables 的 feign 编码
- chart.js - 具有时间轴和多个数据集的 ChartJS 工具提示
- django - 我正在尝试编辑 Django 数据库,但此错误不断发生:视图 social.views.edit 没有返回 HttpResponse 对象
- unity3d - 在 Vuforia+Unity 上实现 sbs 3D
- java - 无法将 org.bson.BsonRegularExpression 转换为 java.lang.String
- sql - 从一个表中获取月份列表并从另一个表中计算每个月份
- json - 将 Dynamo Document.Item 迁移到 aws-sdk-java-v2
- reactjs - 创建构建时如何从 root 以外的地方加载 js 和 css 文件?
- javascript - 通过 Google 显示 iCal - 由于 X-Frame-Options 设置为拒绝而拒绝显示
- python - 如何获得字典的完整输出而不是“{'k1':val1,k2:{...}}”?