Apache Tomcat设置最大file upload大小

我正在实施一个Grails / Groovynetworking应用程序,我想限制用户的file upload大小,我不希望有人上传一个10GB的文件到我的服务器。 我想到的是大多数的方法来计算大小是在文件已经上传之后完成的,如果有人提出了10个configuration文件并上传了10GB大小的10个文件? 这可以耗尽服务器,并占用服务器磁盘上的这么多空间。 所以我试图阻止这一点。

我发现Apache Tomcat允许进行以下configuration,使用硬编码或Annotation方法。 我不确定是否在上传过程中或在将file upload到临时位置之后计算最大文件大小。 文件显示如下:

@MultipartConfig批注支持以下可选属性:

位置:文件系统上目录的绝对path。 位置属性不支持相对于应用程序上下文的path。 此位置用于在处理零件时或文件大小超过指定的fileSizeThreshold设置时临时存储文件。 默认位置是“”。

fileSizeThreshold:文件大小(以字节为单位),文件临时存储在磁盘上。 默认大小是0字节。

MaxFileSize:上传文件允许的最大大小(以字节为单位)。 如果上传文件的大小大于这个大小,Web容器将抛出一个exception(IllegalStateException)。 默认大小是无限的。

maxRequestSize:多部分/表单数据请求所允许的最大大小(以字节为单位)。 如果所有上传的文件的总大小超过此阈值,则Web容器将引发exception。 默认大小是无限的。

注解方式:

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5) 

这里是硬编码值:

 <multipart-config> <!– 50MB max –> <max-file-size>52428800</max-file-size> <max-request-size>52428800</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config> 

我很感激,如果任何人都可以澄清,如果在上传过程中计算MaxFileSize。

MaxFileSize将在整个file upload后计算。 您可以上传一个文件(1GB大小)在您的networking应用程序,然后你会注意到真正发生的事情。 所以依靠Tomcat是没有意义的。 在Servlet中做同样的工作是可能的,但是当你的计数器达到MaxFileSize时,你可以断开底层的HTTP连接? 我想你没办法 HTTP协议是单向的,所以你不能告诉浏览器及时取消长篇文章。 你唯一能做的就是当你的计数器达到阈值时,忽略来自inputstream的后续字节,以保护磁盘空间,直到文件传输完成。