Java 8 Spark:多部分请求缺少内容
Java 8 Spark: Missing content for multipart request
已解决 - 请参阅下面的编辑评论
我正在关注 Java spark 的 the guide 如何使用 post 请求上传文件。
我的上传请求 header 和 body:
Content Type: multipart/form-data; boundary=zQqNxBjHLrzzCCIjVOhwqHUxRSkiHEz
body: --zQqNxBjHLrzzCCIjVOhwqHUxRSkiHEz
Content-Disposition: form-data; name="file"; filename="test_file"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
some text
--zQqNxBjHLrzzCCIjVOhwqHUxRSkiHEz--
使用 Java Spark 框架' 我有以下代码:
Spark.before((request, response) -> {
MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/tmp");
request.raw().setAttribute("org.eclipse.multipartConfig", multipartConfigElement);
System.out.println(request.raw().getPart("file"));
});
但是,当我尝试运行这个例子的时候。我收到以下异常:
[qtp244774599-29] ERROR spark.webserver.MatcherFilter -
java.io.IOException: Missing content for multipart request
at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:480)
at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:402)
at org.eclipse.jetty.server.Request.getPart(Request.java:2046)
at javax.servlet.http.HttpServletRequestWrapper.getPart(HttpServletRequestWrapper.java:361)
at
Main.lambda$main[=13=](Main.java:39)
at
Main$$Lambda/1190654826.handle(Unknown Source)
at spark.SparkBase.handle(SparkBase.java:343)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:120)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
编辑
找到解决方案。 Spark 最近发布了 v2.3,HaiderAgha 的答案确实有效。所以解决方案是更新到 v2.3 并使用 org.eclipse.jetty.multipartConfig
而不是 org.eclipse.multipartConfig
.
此修复仅适用于 spark 2.3!
而不是
request.raw().setAttribute("org.eclipse.multipartConfig",multipartConfigElement);
使用
request.raw().setAttribute("org.eclipse.jetty.multipartConfig",multipartConfigElement);
已解决 - 请参阅下面的编辑评论
我正在关注 Java spark 的 the guide 如何使用 post 请求上传文件。
我的上传请求 header 和 body:
Content Type: multipart/form-data; boundary=zQqNxBjHLrzzCCIjVOhwqHUxRSkiHEz
body: --zQqNxBjHLrzzCCIjVOhwqHUxRSkiHEz
Content-Disposition: form-data; name="file"; filename="test_file"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
some text
--zQqNxBjHLrzzCCIjVOhwqHUxRSkiHEz--
使用 Java Spark 框架' 我有以下代码:
Spark.before((request, response) -> {
MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/tmp");
request.raw().setAttribute("org.eclipse.multipartConfig", multipartConfigElement);
System.out.println(request.raw().getPart("file"));
});
但是,当我尝试运行这个例子的时候。我收到以下异常:
[qtp244774599-29] ERROR spark.webserver.MatcherFilter -
java.io.IOException: Missing content for multipart request
at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:480)
at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:402)
at org.eclipse.jetty.server.Request.getPart(Request.java:2046)
at javax.servlet.http.HttpServletRequestWrapper.getPart(HttpServletRequestWrapper.java:361)
at
Main.lambda$main[=13=](Main.java:39)
at
Main$$Lambda/1190654826.handle(Unknown Source)
at spark.SparkBase.handle(SparkBase.java:343)
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:120)
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
编辑
找到解决方案。 Spark 最近发布了 v2.3,HaiderAgha 的答案确实有效。所以解决方案是更新到 v2.3 并使用 org.eclipse.jetty.multipartConfig
而不是 org.eclipse.multipartConfig
.
此修复仅适用于 spark 2.3!
而不是
request.raw().setAttribute("org.eclipse.multipartConfig",multipartConfigElement);
使用
request.raw().setAttribute("org.eclipse.jetty.multipartConfig",multipartConfigElement);