当前位置: 首页 > 知识库问答 >
问题:

Apache HttpPost多文件上载失败,服务器错误-缺少初始多部分边界

越信鸥
2023-03-14

我尝试上传多个文件,使用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)

如果我只上传一个文件就行了!

注意,这不是重复的。这些链接显示了在服务器端引用问题的帖子。这是客户端的问题。

Jetty对多部分表单请求抛出“缺少多部分请求的内容”

500内部服务器错误Android HttpPost文件上载

共有2个答案

姚向晨
2023-03-14

从标题中完全删除内容类型选项,使其正常工作。

实例

headers = {
  'cache-control': 'no-cache',
  'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW',
  'postman-token': '26ef68f6-e579-a029-aec2-09b291678b4d',
  'storeid': '4223556'
}
宓诚
2023-03-14

我找到了一个解决方案。我想与其他人分享它,这样您就可以1)学习如何上传文件和2)注意HTTP标头。

当我将Filebody附加到MultipartEntityBuilder时,它会自动设置边界。我只是从代码中删除了这一行

 request.addHeader("Content-Type", "multipart/form-data"); //Remove it

附有一个或多个文件的POST请求示例

多部分内容类型

 类似资料:
  • 不知道我还缺了什么。调试时我还发现 getAllowCasualMultiPartParsing()显示为false。看起来tomcat上下文中没有设置多部分配置。我使用的是嵌入式tomcat。

  • 下面给出依赖关系树。堆栈超过流要求放更多的文本。

  • 问题内容: 我正在尝试使用MEAN堆栈创建一个简单的单页应用程序。到目前为止,我在本地主机上工作,并且一切正常。 可悲的是,将代码上传到服务器后,每当我的应用程序尝试从部分文件夹(HTML模板)下载任何内容时,我都会收到状态码500(内部服务器错误)。 这不是CORS问题(相同的域),但只是要确保我也安装了CORS插件。 路线示例: 我也有路径设置: 我搜索了许多页面,但找不到解决方案。感谢您的任

  • 我正在尝试上传图像与修改库。我就是这样上传的: 请求代码: 答复: 如果我是通过客户端浏览器(如postman或DHC)发布的,则请求与上面相同,并且我得到一个成功的XML响应。 请看我在邮递员客户端上尝试的截图。它是成功的。

  • 编写代理文件上载的应用程序。我正在使用CURL发布文件,但有一些问题。发布到脚本是正常的,它从脚本发布到下一个服务器就是问题所在。我一直从服务器收到此错误: “请求被拒绝,因为没有找到多部分边界” 这是我的代码: 我在网上读到的所有内容都表明,这应该可行,而且设置标题内容类型也是不必要的,但当我删除内容类型时,我会出现以下错误: 请求不包含多部分/表单数据或多部分/混合流,内容类型标头为null

  • 我正在使用spring boot/Angular 6应用程序,我想将文件上载到服务器,我按照本教程上载了一个多部分文件:https://grokonez.com/spring-framework/spring-boot/angular-5-upload-get-multipartfile-to-from-spring-boot-server“。文件上载在应用程序的文件夹中,但现在我想使用URL将文