Spring Boot Grails3文件上载最大文件大小限制

oiopk7p5  于 2023-01-26  发布在  Spring
关注(0)|答案(6)|浏览(156)

我尝试更新Grails 3中的文件上载maxFileSize限制,并尝试了src/main/resources/application.propertiesapplication.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应用程序中配置什么以及在哪里配置有什么帮助吗?

gt0wga4j

gt0wga4j1#

Grails 3、Grails 4、Grails 5和Grails 6

解决方案是在application.yml文件中设置maxFileSizemaxRequestSize限制(通常放在grails-app/conf/中)。

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

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

常见问题

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

YOUR_MAX_SIZE_IN_MB * 1024 * 1024 = BYTES

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

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

2.安全

正如OWASP所说
将文件大小限制为最大值,以防止拒绝服务攻击
因此,这些限制的存在是为了防止DoS攻击和增强整体应用程序性能(请求大小越大==服务器使用的内存越多)。

3. maxFileSizemaxRequestSize的正确值是多少?

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

46qrfjad

46qrfjad2#

问题的一部分是设置最大文件大小。另一个问题是优雅地处理那个错误。
下面是我的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>());
        }
    }
}

其思想是检查控制器或过滤器中的request属性,以确定文件是否太大。

ehxuflar

ehxuflar3#

我在www.example.com或application. yml中设置新的最大值时也没有成功application.properties。
不过,在conf/spring/resources.groovy中使用bean定义确实有效:

import javax.servlet.MultipartConfigElement

// Place your Spring DSL code here
beans = {
   multipartResolver(org.springframework.web.multipart.commons.CommonsMultipartResolver){
        maxInMemorySize=1000000
        maxUploadSize=100000000
        //uploadTempDir="/tmp"
    }
}
wnvonmuf

wnvonmuf4#

试试这个https://github.com/zyro23/grails-core-668/blob/master/grails-app/conf/application.yml
上传:最大文件大小:999999999最大请求大小:9999999999

suzh9iv8

suzh9iv85#

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

grails.controllers.upload.maxFileSize

和/或

grails.controllers.upload.maxRequestSize

配置属性/设置

cwtwac6a

cwtwac6a6#

下面的代码对我很有效(grails 3.3.9):
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)
}

MyFile.groovy域中

package attainrvtwo

class MyFile {

    byte[] myFile

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

conf/application.yml的末尾

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

相关问题