【问题标题】:Jetty file upload via multipart request directly farward file to FileInputStream通过多部分请求直接将文件上传到 FileInputStream 的 Jetty 文件
【发布时间】:2019-12-31 09:01:37
【问题描述】:

我目前正在使用 jetty 作为我的 serverlet 容器在 java 中实现文件上传服务。我正面临一个我想解决的问题。
我有一个用于文件上传的端点,它是一个接收多部分表单数据的 post 端点。
这适用于小文件,但当用户上传大文件时让我很头疼。如果我没记错的话,Jetty 会在将上传的文件转发到我的 FileInputStream 之前对其进行缓冲。
我的意思是它首先填充其内部缓冲区,然后将其写入FileInputStream。有没有办法阻止这种情况并调整码头,使其在缓冲数据之前直接将数据中继到FileInputStream
我已经尝试将输入流包装到缓冲的流中,但 Jetty 首先使用文件,对其进行缓冲,然后将其写入InputStream
经过一番研究,我看到一条评论建议使用 put 代替,然后访问原始数据以实现这种直接转发。但我想知道是否还有另一种更好的方法。

问候阿图尔

【问题讨论】:

    标签: java upload jetty multipart


    【解决方案1】:

    multipart/form-data 上处理大文件时,请确保您使用的是最新的 RFC7578,因为它是性能最高的。

    Server server = new Server();
    
    HttpConfiguration httpConfig = new HttpConfiguration();
    httpConfig.setMultiPartFormDataCompliance(MultiPartFormDataCompliance.RFC7578);
    ServerConnector connector = new ServerConnector(server, 
        new HttpConnectionFactory(httpConfig));
    server.addConnector(connector)
    

    接下来,当您使用HttpServletRequest.getPart(String) 方法时,您应该知道Jetty 在内部必须提取multipart/form-data 的内容,以便.getPart().getParameter() 方法都可以访问。

    以这种方式访问​​大文件实际上是 Jetty 本身的单元测试。

    见:HugeResourceTest.java

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 2020-11-14
      • 1970-01-01
      • 2020-03-22
      • 2017-02-11
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多