Java 8 Spark:缺少多部分请求的内容

时间:2015-06-07 10:59:29

标签: java multipartform-data httpserver

已解决 - 请参阅下面的编辑评论

我关注如何使用post请求上传文件的the guide Java spark。

我的上传请求标题和正文:

    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$0(Main.java:39)
        at 
Main$$Lambda$1/1190654826.handle(Unknown Source)
        at spark.SparkBase$2.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

1 个答案:

答案 0 :(得分:1)

此修复仅适用于Spark 2.3!

而不是

request.raw().setAttribute("org.eclipse.multipartConfig",multipartConfigElement);

使用

request.raw().setAttribute("org.eclipse.jetty.multipartConfig",multipartConfigElement);