Grails 2.4限制/最大上载大小

Grails 2.4限制/最大上载大小,grails,file-upload,Grails,File Upload,关于这个问题,我无法让它在Grails2.4上运行 我已将此添加到我的Grails应用程序中: 资源.groovy beans = { multipartResolver(CustomMultipartResolver) { maxUploadSize = 2000000 } } 添加到BootStrap.groovy public class CustomMultipartResolver extends CommonsMultipartResolver {

关于这个问题,我无法让它在Grails2.4上运行

我已将此添加到我的Grails应用程序中:

资源.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年是很久以前的事了

错误消息非常清楚-您要么向构造函数传递了不正确的类型,要么传递了错误数量的参数

Grails2.4.4使用Spring4.0.7,该类有两个构造函数:

public DefaultMultipartHttpServletRequest(HttpServletRequest request, MultiValueMap<String, MultipartFile> mpFiles,
        Map<String, String[]> mpParams, Map<String, String> mpParamContentTypes)
你可以看到

这应该起作用:

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(), [:], [:])
      }
   }
}

好的,谢谢你,这个错误被消除了,捕获正在工作。如果(request.FILE_SIZE_超过了_ERROR),我也需要在控制器中进行更改{但现在的问题是,由于参数丢失,我无法将用户扔回创建包。仅包含-->[操作:保存,格式:null,控制器:blaBlub]由于上载域是一个子域,因此创建视图需要父ID。知道如何至少保留父ID吗?您应该单独提出新问题。如您所愿,感谢您的支持!
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(), [:], [:])
      }
   }
}