6

我有一个带有以下注释的 Servlet,非常基本。

@MultipartConfig
 (
      fileSizeThreshold = 1024 * 1024 * 1, // 1 MB
      maxFileSize = 1024 * 1024 * 30, // 30 MB
      maxRequestSize = 1024 * 1024 * 35, // 35 MB
      location = "/somewhere"
  )

我发帖的原因是设置fileSizeThreshold。据我了解,fileSizeThreshold设置了在将文件写入磁盘之前将文件保存在内存中的阈值。我知道默认值为 0,在上面的代码片段中,一旦传入文件达到 1mb,它将开始写入磁盘。

这个设置有什么意义?在写入之前增加内存中文件的数量是否有优势?

我有一个应用程序,其中80% 的文件上传 <5mb,但我们确实获得了25-30mb范围内的更大文件。我们甚至正在考虑将 max 增加到50mb

我可以在MultipartConfig上找到的每篇文章都描述了fileSizeThreshold的作用,但没有描述如何/何时使用它……根据上一段中的文件要求,有人有什么建议吗?如果有什么不同,我们在 ubuntu 机器上运行 glassfish4。

提前致谢!

4

1 回答 1

9

with 的想法fileSizeThreshold有点误导,因为它是一个简单的机制,但它的实际用例似乎非常罕见,以至于让您质疑您是否正确理解了该属性。

您说得对,这是文件将持久保存到磁盘的点。请注意,默认情况下,这是 0,因此默认情况下文件将被写入磁盘,这可能是 99% 的时间你想要的。

fileSizeThreshold您的文件的生命周期很短并且以高速率进入时会派上用场,以至于将文件持久化到磁盘会导致显着的性能开销。您可以将此参数设置为高于 0 的值,以节省一些磁盘 i/o。

与具有始终将文件保存在内存中的布尔值相比,具有阈值很重要的原因是为了给自己一个安全网,以免将太大的文件保存在内存中(出于明显的原因)。

于 2015-12-16T22:51:06.860 回答