使用Spring 3.0的MultipartHttpServletRequest时请求大小限制

时间:2010-12-29 14:08:28

标签: java spring file-upload spring-mvc

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

  1. 应该有不同的文件大小限制,总请求大小限制或文件大小是唯一的限制,并且请求能够将100个文件作为lonng上传,因为它们不是太大。
  2. Doest Spring请求包装器读取完整的请求并将其存储在JAVA堆内存中,或者存储它的temporaray文件以便能够使用大配额。
  3. 在流媒体中使用读取httpservlet请求是否会改变大小限制,而不是使用应用程序服务器一次性读取完整的http请求。
  4. 这个过程的瓶颈是什么 - Java堆大小,我的web服务器运行的文件系统的配额,我要保存文件的DataBase允许的最大BLOB大小是多少?或Spring内部限制?
  5. 仍然没有确切答案的相关主题:

1 个答案:

答案 0 :(得分:2)

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

  

是否应该有不同的文件大小限制和总请求大小   限制或文件大小是唯一的   限制和请求是有能力的   以lonng为单位上传100个文件   它们不是太大。

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

  

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

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

  

是否使用在流中读取httpservlet请求   改变尺寸限制而不是使用   完整的http请求一次性读取   应用程序服务器。

抱歉,我无法回答这个问题。流中的httpservlet请求和一次性读取http请求之间有什么不同?

  

这个过程的瓶颈是什么?    - Java堆大小,我的Web服务器所在的文件系统的配额   运行,允许的最大BLOB大小   我想要的DataBase   保存文件alows?或春天   内部限制?

通用速度瓶颈可按以下顺序排序:网络<文件IO<存储器

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

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

根据ibm,BLOB限制应为2GB。

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