我想使用multipart / formdata通过HTTP发送几个大文件。
我实际上只是想通过我的服务对它们进行流处理,因此我想将不同的部分作为流进行获取,并且绝对希望避免在有机会传递数据之前将整个请求缓冲在内存中。
我感觉到码头(我们正在使用码头9.0.7附带的Dropwizard 0.7.1)在执行我的代码之前,整个请求都会被缓冲。
有办法避免这种情况吗?理想情况下,我希望有一个基于事件的系统(它会触发一个事件,例如“名称为xxx的下一部分”,并为我提供可以使用的流)。
multipart/formdata
各种内部组件处理的请求将这些部分分开,以便HttpServletRequest.getParts()
(和各种类似方法)可以正常工作。
选项1:自己处理多部分
颠覆Servlet规范的这种行为可能会有些棘手,但我将继续尝试。
首先,不要不声明@MultipartConfig
对于要处理此请求数据的servlet配置。
接下来,就不会在访问方法HttpServletRequest
是需要了解的请求的参数,或其部件。
覆盖HttpServlet.service(HttpServletRequest, HttpServletResponse)
方法而不是doPost()
方法,并自己处理原始的Request有效负载内容。
这意味着您将编写一个MultiPart InputStream解析器,并亲自处理该多部分的解析。在线上有很多示例,您只想选择一个对您更有意义的示例。
选项#2:不要将POST与多部分内容一起使用
如果您正在流式上传文件,请不要对多部分使用POST,而对原始有效负载数据使用PUT,那么您将跳过整个魔术层,即多部分请求POST有效负载。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句