Spark Java:如何处理多部分/表单数据输入? [英] spark java: how to handle multipart/form-data input?

查看:138
本文介绍了Spark Java:如何处理多部分/表单数据输入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 spark 开发Web应用程序;我要上传文件时会发生问题:

I am using spark to develop a web application; the problem occurs when I want to upload a file:

public final class SparkTesting
{
    public static void main(final String... args)
    {
        Spark.staticFileLocation("/site");

        Spark.port(8080);

        Spark.post("/upload", (request, response) -> {
            final Part uploadedFile = request.raw().getPart("uploadedFile");
            final Path path = Paths.get("/tmp/meh");
            try (final InputStream in = uploadedFile.getInputStream()) {
                Files.copy(in, path);
            }

            response.redirect("/");
            return "OK";
        });
    }
}

但是我得到这个错误:

[qtp509057984-36] ERROR spark.webserver.MatcherFilter - 
java.lang.IllegalStateException: No multipart config for servlet
    at org.eclipse.jetty.server.Request.getPart(Request.java:2039)
    at javax.servlet.http.HttpServletRequestWrapper.getPart(HttpServletRequestWrapper.java:361)
    at com.github.fge.grappa.debugger.web.SparkTesting.lambda$main$0(SparkTesting.java:20)
    at com.github.fge.grappa.debugger.web.SparkTesting$$Lambda$1/920011586.handle(Unknown Source)
    at spark.SparkBase$1.handle(SparkBase.java:264)
    at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:154)
    at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
    at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:451)
    at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527)
    at java.lang.Thread.run(Thread.java:745)

即使我尝试明确指定类型,如:

And even if I try and specify the type explicitly, as in:

Spark.post("/upload", "multipart/form-data", etc etc)

它仍然会失败.

我可能可以找到一个库来解析多部分/表单数据,获取全部内容,然后自己解析,但这会很浪费.

I could probably find a library to parse multipart/form-data, grab the whole content and just parse myself, but that'd be a waste.

我可以配置spark来处理这种情况吗?

Can I configure spark to handle that case?

推荐答案

凯耀提供的答案是正确的,除了使用时:

The answer provided by Kai Yao is correct except that when using:

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

改为使用此:

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

这篇关于Spark Java:如何处理多部分/表单数据输入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆