2015-06-07 1 views
2

RESOLVED - пожалуйста см EDIT комментарий нижеJava 8 Spark: недостающее содержание для многочастного запроса

Я следующий the guide из Java искры о том, как загрузить файл с помощью запроса поста.

Моя загрузка заголовка запроса и тела:

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.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) 

EDIT

Найдено решение. Spark недавно выпустил v2.3, который с ответом HaiderAgha действительно работает. Поэтому решение должно обновиться до версии 2.3 и использовать org.eclipse.jetty.multipartConfig вместо org.eclipse.multipartConfig.

ответ

1

Это исправление работает только для искры 2.3!

Вместо

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

Использование

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

Это исправление фактически работает только для Спарк 2.3, который недавно был освобожден. Во всяком случае, я отметил этот ответ как решение и добавил комментарий в своем оригинальном сообщении. Благодаря! – Mattan

+0

Это работает для меня. Я заметил, что при использовании multipart/form-data вы должны использовать «части» для * все *, так как искра не может справиться с этим. Рамка для мусора. –