gpt4 book ai didi

java - 如何将多个大文件流式传输到 jetty

转载 作者:行者123 更新时间:2023-12-01 11:21:52 26 4
gpt4 key购买 nike

我想使用 multipart/formdata 通过 HTTP 发送多个大文件。

我实际上只想通过我的服务流式传输它们,所以我想将不同的部分作为流获取,并且绝对希望避免整个请求在我有机会传递数据之前缓冲在内存中.

我感觉使用jetty(我们使用的是jetty 9.0.7附带的Dropwizard 0.7.1),整个请求在我的代码执行之前就被缓冲了。

有办法避免这种情况吗?理想情况下,我希望有一个基于事件的系统(它会触发“下一个名为 xxx 的部分”之类的事件,并为我提供一个可以使用的流)。

最佳答案

带有 multipart/formdata 的请求由各种内部组件处理,以分解各个部分,以便 HttpServletRequest.getParts() (以及各种类似的方法)可以正常工作。

选项#1:自己处理多部分

颠覆 Servlet 规范的这种行为可能有点棘手,但我会尝试一下。

首先,请勿声明 @MultipartConfig配置您想要处理此请求数据的 servlet。

接下来,不要访问 HttpServletRequest 中需要了解请求参数或其部分的方法。

覆盖HttpServlet.service(HttpServletRequest, HttpServletResponse)方法,而不是 doPost() 方法,并自行处理原始请求负载内容。

这意味着您将编写一个多部分输入流解析器,并自己处理多部分的解析。网上有很多这样的例子,您只需选择一个对您更有意义的即可。

选项#2:不要将 POST 与多部分一起使用

如果您要流式上传文件,请不要将 POST 与多部分一起使用,而将 PUT 与原始负载数据一起使用,那么您将跳过整个魔法层,即多部分请求 POST 负载。

关于java - 如何将多个大文件流式传输到 jetty ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31131962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com