我正在实施一个Grails / Groovynetworking应用程序,我想限制用户的file upload大小,我不希望有人上传一个10GB的文件到我的服务器。 我想到的是大多数的方法来计算大小是在文件已经上传之后完成的,如果有人提出了10个configuration文件并上传了10GB大小的10个文件? 这可以耗尽服务器,并占用服务器磁盘上的这么多空间。 所以我试图阻止这一点。
我发现Apache Tomcat允许进行以下configuration,使用硬编码或Annotation方法。 我不确定是否在上传过程中或在将file upload到临时位置之后计算最大文件大小。 文件显示如下:
@MultipartConfig批注支持以下可选属性:
位置:文件系统上目录的绝对path。 位置属性不支持相对于应用程序上下文的path。 此位置用于在处理零件时或文件大小超过指定的fileSizeThreshold设置时临时存储文件。 默认位置是“”。
- nginx上传进度返回我总是相同的大小和recived
- 是否可以直接将file upload到Amazon S3并进行编辑?
- WebDisk与FTP – 什么更好?
- 由于pipe道损坏,无法将多于8GB的file upload到Amazon S3
- Nginx client_body_in_file_only用于file upload性能
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的后续字节,以保护磁盘空间,直到文件传输完成。