【问题标题】:Request size limitation when using MultipartHttpServletRequest of Spring 3.0使用 Spring 3.0 的 MultipartHttpServletRequest 时的请求大小限制
【发布时间】:2010-12-29 14:08:27
【问题描述】:

如果我使用 HTTP 多部分内容类型在一个客户端的表单提交中上传文件列表,我想知道大小限制是多少。 在服务器端,我使用 Spring 的 MultipartHttpServletRequest 来处理请求。 毫米问题:

  1. 是否应该有不同的文件大小限制和总请求大小限制或文件大小是唯一的限制,并且请求能够上传 100 多个文件,只要它们不太大。
  2. Spring 请求包装器是读取完整的请求并将其存储在 JAVA 堆内存中还是存储它的临时文件以便能够使用大配额。
  3. 与使用应用程序服务器一次读取完整的 http 请求相比,在流式传输中使用读取 httpservlet 请求是否会改变大小限制。
  4. 这个过程的瓶颈是什么 - Java 堆大小、我的 web 服务器运行的文件系统的配额、我要保存文件的数据库允许的最大 BLOB 大小?还是 Spring 内部限制?

仍然没有确切答案的相关主题:

【问题讨论】:

    标签: java spring file-upload spring-mvc


    【解决方案1】:

    我查看了 Spring CommonsMultipartResolver 代码。它使用 apache 文件上传来解析多部分数据。 CommonsMultipartResolver 已将默认缓冲阈值设置为 10kB 并使用 DiskFileItemFactory 创建 FileItem。如果 Stream 大于 10kB,FileItem 将被写入磁盘。您还可以更改存储库文件夹的位置以存储临时上传的文件项。

    是否应该有不同的文件大小限制和总请求大小 限制或文件大小是唯一的 限制和请求是有能力的 上传 100 多个文件的时间 它们不是太大。

    我不知道您可以发送的多部分数据中的最大部分数量限制或 Spring CommonsMultipartResolver 的限制,但因为它使用 Apache FileUpload,我认为它们应该是相同的限制。我使用 Apache FileUpload(没有 Spring)来接收大于 3GB 的多部分流,它包含 2 个文件,20MB 和 3.6GB。虽然,我不能给你确切的限制,但它应该能够处理几 GB 的流。

    Spring 请求包装器是否读取完整的请求并存储它 在 JAVA 堆内存中或它存储 它的临时文件能够 使用大配额。

    正如我之前解释的,CommonsMultipartResolver 使用 Apache FileUpload。 FileItem 是使用 DiskFileItemFactory 创建的,因此 FileItem 会临时保存到磁盘。默认内存阈值为 10kB。

    在流式传输中使用读取 httpservlet 请求会 更改大小限制而不是使用 完成一次读取的http请求 应用服务器。

    对不起,我无法回答这个问题。流式传输中的 httpservlet 请求和一次性读取的 http 请求有什么区别?

    这个过程的瓶颈是什么 - Java 堆大小,我的 Web 服务器所在的文件系统的配额 运行,最大允许的 BLOB 大小 我要在其中的数据库 保存文件吗?或弹簧 内部限制?

    一般速度瓶颈可以按以下顺序排序:网络

    可以在启动 servlet 容器之前更改 Java 堆大小。 2^64 是 JVM 64 位的理论限制。

    对于文件系统的配额,它取决于文件系统,例如FAT32 允许您的最大文件大小为 4GB、NTFS 16TB、EX3 16GB-2TB 等。

    根据ibm,BLOB 限制应该是 2GB。

    我不知道 Spring 内部限制。但是 Apache FileUpload 应该能够毫无问题地处理几 GB 的流。

    【讨论】:

      猜你喜欢
      • 2014-12-17
      • 1970-01-01
      • 2020-10-22
      • 2019-12-28
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2018-02-17
      相关资源
      最近更新 更多