【问题标题】:Grails, Limiting file upload size to few MegabytesGrails,将文件上传大小限制为几兆字节
【发布时间】:2014-01-14 08:32:08
【问题描述】:

我正在尝试找到一种方法来限制用户可以上传的文件的大小。我需要满足以下条件:

-我可以使用客户端文件大小检测,但可以绕过。所以服务器端更可取。 -我希望能够在上传开始之前弄清楚文件大小,或者如果不可能,我应该能够在流式传输时设置大小限制,所以如果流达到限制它会停止并且不会t 不再接收来自客户端的流。 (我看到 Apache 有一个我可以使用的最大限制,但我想知道我是否可以使用 Spring/Grails 来做到这一点)

有没有办法在 Grails 中优雅地做到这一点?

P.S:我注意到“multipartResolver”可以设置文件上传限制,multipartResolver 是先上传然后检查,还是在文件实际完整下载之前检查大小?

【问题讨论】:

标签: spring apache tomcat grails file-upload


【解决方案1】:

知道您使用自己的代码进行上传,我假设您的域中有一个字段可以保存文件。如果是这样,那么您可以在域类的静态约束中添加一个 maxSize 属性。

示例:

class Files {

  byte[] uploadedFile


static constraints = {
uploadedFile(nullable:true, maxSize: 10 * 1024 * 1024)

}
}

它对我有用。希望对你有帮助。

【讨论】:

  • 感谢您提供解决方案,但我想将其保存到文件系统中,我不使用数据库。
【解决方案2】:

我已经回答了here 关于文件大小的类似问题。如果您将文件存储在文件系统上而不是作为数据库中的 blob,这将是一个很好的用途。我不知道何时检查文件的大小。

我认为只有在文件完全上传后才能执行此操作。我看不出您如何在流式传输时检测到它,因为服务器没有所有字节来计算大小。

JavaScript 无法在上传前检测文件的大小。如果您想要做这个客户端,您将不得不研究闪存类型的解决方案。

【讨论】:

    【解决方案3】:

    Apache Tomcat 允许以下配置,采用硬编码或注释格式。我不确定最大文件大小是在上传过程中还是在文件上传到临时位置之后计算的。该文档指出以下内容:

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

    location:文件系统上目录的绝对路径。这 location 属性不支持相对于应用程序的路径 语境。此位置用于临时存储文件,而 部分被处理或当文件的大小超过指定的 文件大小阈值设置。默认位置是“”。

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

    MaxFileSize:上传文件允许的最大大小,以字节为单位。如果 任何上传文件的大小大于此大小,网络 容器将抛出异常 (IllegalStateException)。默认 大小是无限的。

    maxRequestSize:multipart/form-data 允许的最大大小 请求,以字节为单位。 Web 容器将抛出异常,如果 所有上传文件的总大小超过此阈值。默认 大小是无限的。

    注解方式:

    @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 是否在上传过程中计算,我将不胜感激。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 2010-10-08
      • 2015-03-12
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      相关资源
      最近更新 更多