我想使用multipart / formdata通过HTTP发送几个大文件。
我实际上只想通过我的服务流式传输它们,所以我想将不同的部分作为流来获取,并且绝对希望避免在我有机会通过之前将整个请求缓存在内存中数据。
我觉得使用jetty(我们正在使用Jetw 9.0.1附带的Dropwizard 0.7.1)整个请求在我的代码执行之前得到缓冲。
有没有办法避免这种情况?理想情况下,我希望有一个基于事件的系统(它会触发像&#34这样的事件;下一部分名称为xxx"并给我一个我可以使用的流)。
答案 0 :(得分:1)
multipart/formdata
的请求由各种内部组件处理,以拆分这些部分,以便HttpServletRequest.getParts()
(和各种类似的方法)可以正常工作。
选项#1:自己处理多部分
颠覆Servlet规范的这种行为可能有点棘手,但是我会试一试。
首先,执行 not 声明要处理此请求数据的servlet的@MultipartConfig
配置。
接下来,在<{1}}中执行 not 访问方法,这些方法需要了解请求的参数或其部分。
覆盖HttpServlet.service(HttpServletRequest, HttpServletResponse)
方法,而不是HttpServletRequest
方法,并自行处理原始请求有效内容。
这意味着您将编写MultiPart InputStream Parser,并自行处理多部分的解析。网上有很多这样的例子,你只想选择一个对你更有意义的例子。
选项#2:不要在多部分中使用POST
如果您正在上传文件,不使用POST与多部分,使用PUT与原始有效载荷数据,那么您将跳过整个魔法层,即多部分请求POST有效载荷。