Grails 2.4 limit/max 上传大小
Grails 2.4 limit/max upload size
关于 https://brainflush.wordpress.com/2008/12/04/how-to-gracefully-recover-from-file-upload-errors-in-grails/ 我无法让它在 Grails 2.4 上运行。
我已将其添加到我的 Grails 应用程序中:
resources.groovy
beans = {
multipartResolver(CustomMultipartResolver) {
maxUploadSize = 2000000
}
}
添加到 BootStrap.groovy
public class CustomMultipartResolver 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(), [:])
} catch (SizeLimitExceededException e) {
request.setAttribute(FILE_SIZE_EXCEEDED_ERROR, true)
return new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap(), [:])
}
}
}
在控制器中:
if (request.getAttribute(CustomMultipartResolver.FILE_SIZE_EXCEEDED_ERROR)) {
ModActionFile.errors.reject("MyDomain.fileSizeTooLarge")
redirect(controller:'MyDomain', action:'create',params:params)
} else {...
我收到这个错误
Error |
2015-03-17 16:08:57,794 [http-bio-8080-exec-8] ERROR [/tool].[default] - Servlet.service() for servlet [default] in context with path [/tool] threw exception
Message: Could not find matching constructor for: org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest(org.apache.catalina.connector.RequestFacade, org.springframework.util.LinkedMultiValueMap, java.util.LinkedHashMap)
Line | Method
->> 43 | resolveMultipart in CustomMultipartResolver$$EP7CaraR
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
2008 年是很久以前的事了。
错误消息非常清楚 - 您向构造函数传递的类型不正确,或者参数数量错误。
Grails 2.4.4 使用 Spring 4.0.7 并且 class 有两个构造函数:
public DefaultMultipartHttpServletRequest(HttpServletRequest request, MultiValueMap<String, MultipartFile> mpFiles,
Map<String, String[]> mpParams, Map<String, String> mpParamContentTypes)
和
public DefaultMultipartHttpServletRequest(HttpServletRequest request)
你可以看到here。
这应该有效:
class CustomMultipartResolver extends CommonsMultipartResolver {
static final String FILE_SIZE_EXCEEDED_ERROR = 'fileSizeExceeded'
MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) {
try {
super.resolveMultipart request
}
catch (MaxUploadSizeExceededException e) {
request.FILE_SIZE_EXCEEDED_ERROR = true
new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap(), [:], [:])
}
catch (SizeLimitExceededException e) {
request.FILE_SIZE_EXCEEDED_ERROR = true
new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap(), [:], [:])
}
}
}
关于 https://brainflush.wordpress.com/2008/12/04/how-to-gracefully-recover-from-file-upload-errors-in-grails/ 我无法让它在 Grails 2.4 上运行。
我已将其添加到我的 Grails 应用程序中:
resources.groovy
beans = {
multipartResolver(CustomMultipartResolver) {
maxUploadSize = 2000000
}
}
添加到 BootStrap.groovy
public class CustomMultipartResolver 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(), [:])
} catch (SizeLimitExceededException e) {
request.setAttribute(FILE_SIZE_EXCEEDED_ERROR, true)
return new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap(), [:])
}
}
}
在控制器中:
if (request.getAttribute(CustomMultipartResolver.FILE_SIZE_EXCEEDED_ERROR)) {
ModActionFile.errors.reject("MyDomain.fileSizeTooLarge")
redirect(controller:'MyDomain', action:'create',params:params)
} else {...
我收到这个错误
Error |
2015-03-17 16:08:57,794 [http-bio-8080-exec-8] ERROR [/tool].[default] - Servlet.service() for servlet [default] in context with path [/tool] threw exception
Message: Could not find matching constructor for: org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest(org.apache.catalina.connector.RequestFacade, org.springframework.util.LinkedMultiValueMap, java.util.LinkedHashMap)
Line | Method
->> 43 | resolveMultipart in CustomMultipartResolver$$EP7CaraR
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
2008 年是很久以前的事了。
错误消息非常清楚 - 您向构造函数传递的类型不正确,或者参数数量错误。
Grails 2.4.4 使用 Spring 4.0.7 并且 class 有两个构造函数:
public DefaultMultipartHttpServletRequest(HttpServletRequest request, MultiValueMap<String, MultipartFile> mpFiles,
Map<String, String[]> mpParams, Map<String, String> mpParamContentTypes)
和
public DefaultMultipartHttpServletRequest(HttpServletRequest request)
你可以看到here。
这应该有效:
class CustomMultipartResolver extends CommonsMultipartResolver {
static final String FILE_SIZE_EXCEEDED_ERROR = 'fileSizeExceeded'
MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) {
try {
super.resolveMultipart request
}
catch (MaxUploadSizeExceededException e) {
request.FILE_SIZE_EXCEEDED_ERROR = true
new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap(), [:], [:])
}
catch (SizeLimitExceededException e) {
request.FILE_SIZE_EXCEEDED_ERROR = true
new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap(), [:], [:])
}
}
}