我正在尝试更新Grails 3中的文件上传maxFileSize限制并尝试src/main/resources/application.properties
,application.groovy
和application.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应用程序中的位置和配置的任何帮助吗?
答案 0 :(得分:37)
解决方案是在maxFileSize
文件中设置maxRequestSize
和application.yml
限制。一定要有这样的东西:
grails:
controllers:
upload:
maxFileSize: 2000000
maxRequestSize: 2000000
将2000000
替换为文件上传和整个请求所需的最大字节数。 Grails 3 default is 128000 (~128KB)
<强> 1。如何从MB转换为字节?
YOUR_MAX_SIZE_IN_MB * 1024 * 1024 = BYTES
E.g。 以字节为单位转换5 MB
5 * 1024 * 1024 = **5242880** bytes
<强> 2。安全强>
引自OWASP
将文件大小限制为最大值,以防止拒绝服务攻击
因此存在这些限制以防止DoS攻击并强制执行整体应用程序性能(更大的请求大小==从服务器使用更多内存)。
第3。 maxFileSize
和maxRequestSize
的正确值是什么?
这取决于应用程序类型,但保持它们太高通常是一个坏主意。如果您确实需要上传大文件,可能应该开发(或使用)专用(和分离)服务。
答案 1 :(得分:5)
部分问题是设置最大文件大小。另一个问题是优雅地处理该错误。
这是我的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>());
}
}
}
想法是检查控制器中的请求属性或过滤器以确定文件是否过大。
答案 2 :(得分:4)
我也没有尝试在application.properties或application.yml中设置新的最大值。
在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"
}
}
答案 3 :(得分:3)
试试这个 https://github.com/zyro23/grails-core-668/blob/master/grails-app/conf/application.yml
上传: maxFileSize:9999999999 maxRequestSize:9999999999
答案 4 :(得分:2)
https://github.com/grails/grails-core/issues/668
grails.controllers.upload.maxFileSize
和/或
grails.controllers.upload.maxRequestSize
配置属性/设置
答案 5 :(得分:0)
以下内容对我有用(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