17

我正在尝试更新 Grails 3 中的文件上传 maxFileSize 限制并尝试了 和 中的配置,src/main/resources/application.properties但它仍然抛出异常application.groovyapplication.yml

Class
    org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException
Message
    the request was rejected because its size (154738) exceeds the configured maximum (128000)

有关在 Grails 3 应用程序中配置的位置和内容的任何帮助?

4

6 回答 6

50

圣杯 3 和 4

解决方案是在文件中设置maxFileSizemaxRequestSize限制application.yml。一定要有这样的东西:

grails:
    controllers:
        upload:
            maxFileSize: 2000000
            maxRequestSize: 2000000

替换2000000为文件上传和整个请求所需的最大字节数。Grails 3Grails 4 默认为 128000 (~128KB)。



常问问题

1、如何将MB转换为字节?

YOUR_MAX_SIZE_IN_MB * 1024 * 1024 = BYTES

例如以字节为单位转换 5 MB

5 * 1024 * 1024 = **5242880** bytes

2. 安全

作为OWASP的报价

将文件大小限制为最大值以防止拒绝服务攻击

因此,存在这些限制是为了防止 DoS 攻击并强制执行整体应用程序性能(更大的请求大小 == 从服务器使用更多内存)。

maxFileSize3.和的正确值是maxRequestSize多少?

这取决于应用程序类型,但将它们保持得太高通常是个坏主意。如果你真的需要上传大文件,也许你应该开发(或使用)一个专用的(和分离的)服务。

于 2015-11-04T21:13:53.580 回答
8

部分问题是设置最大文件大小。另一个问题是优雅地处理该错误。

这是我的bean定义:

multipartResolver(MyMultipartResolver) {
    maxUploadSize = (5*1024*1024)
}

这是我的实现:

public class MyMultipartResolver extends CommonsMultipartResolver {

    static final String FILE_SIZE_EXCEEDED_ERROR = "fileSizeExceeded";

    public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) {
        try {
            return super.resolveMultipart(request);
        } catch (MaxUploadSizeExceededException e) {
            request.setAttribute(FILE_SIZE_EXCEEDED_ERROR, true);
            return new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap<String, MultipartFile>(), new LinkedHashMap<String, String[]>(), new LinkedHashMap<String, String>());
        }
    }
}

这个想法是检查控制器中的请求属性或过滤器以确定文件是否太大。

于 2015-10-06T15:38:49.513 回答
4

I also had no luck trying to set new maximum values in application.properties or application.yml.

What does work though is using a bean definition in conf/spring/resources.groovy:

import javax.servlet.MultipartConfigElement

// Place your Spring DSL code here
beans = {
   multipartResolver(org.springframework.web.multipart.commons.CommonsMultipartResolver){
        maxInMemorySize=1000000
        maxUploadSize=100000000
        //uploadTempDir="/tmp"
    }
}
于 2015-04-24T20:36:47.287 回答
3

https://github.com/grails/grails-core/issues/668

grails.controllers.upload.maxFileSize

和/或

grails.controllers.upload.maxRequestSize 

配置属性/设置

于 2015-04-27T09:44:45.793 回答
3

试试这个 https://github.com/zyro23/grails-core-668/blob/master/grails-app/conf/application.yml

上传:maxFileSize:9999999999 maxRequestSize:9999999999

于 2015-10-06T12:06:48.500 回答
0

the following worked for me(grails 3.3.9):
in conf/spring/resources.groovy

import org.springframework.web.multipart.commons.CommonsMultipartResolver

// Place your Spring DSL code here
beans = {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver()
        multipartResolver.setMaxUploadSize(2000000)
}

in MyFile.groovy domain

package attainrvtwo

class MyFile {

    byte[] myFile

    static constraints = {
        myFile(maxSize: 2000000)
    }
}

at the end of conf/application.yml

---
grails:
  controllers:
    upload:
      maxFileSize: 2000000
      maxRequestSize: 2000000
于 2019-06-12T11:06:14.317 回答