上传MultipartFile时无法捕获SizeLimitExceededException

问题描述 投票:0回答:1

我想上传一个大文件时捕获异常SizeLimitExceededException。但是,我在控制器中创建了一个方法来捕获此异常,但他返回:

Error 500: Internal Server Error
URI
/user/uploadProfileImage
Class
org.apache.tomcat.util.http.fileupload
.FileUploadBase$SizeLimitExceededException
Message
Could not parse multipart servlet request; nested exception is 
java.lang.IllegalStateException: 
org.apache.tomcat.util.http.fileupload
.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (310380) exceeds the configured maximum (128000)
Caused by
the request was rejected because its size (310380) exceeds the configured maximum (128000)

捕获异常的方法:

def handleSizeLimitExceededException(FileUploadBase.SizeLimitExceededException ex){
     render(['error':true, message:ex.getMessage()] as JSON)
}

我的控制器:

class UserController {
...
    def uploadProfileImage(ProfileImageCommand cmd) {
        if (cmd.hasErrors()) {
                //respond(cmd, model: [user: cmd], view: 'create')
                response.status = 500
                render(['error':true, message:cmd.getErrors()] as JSON)
            }

        String filename = uploadFileService.uploadFileInTemp(cmd, relativePathTmp)

        Locale locale = request.locale
        //flash.message = crudMessageService.message(CRUD.UPDATE, domainName(locale), pointOfInterest.id, locale)
        render(['filename':filename, 'url': uploadFileService.getUrl(filename, relativePathTmp)] as JSON)
    }

    def handleSizeLimitExceededException(FileUploadBase.SizeLimitExceededException ex){
        render(['error':true, message:ex.getMessage()] as JSON)
    }
}

我的验证:

class ProfileImageCommand implements Validateable {
    MultipartFile imageFile

    static constraints = {
        imageFile  validator: { val, obj ->
            if ( val == null ) {
                return false
            }
            if ( val.empty ) {
                return false
            }

            ['jpeg', 'jpg', 'png'].any { extension ->
                val.originalFilename?.toLowerCase()?.endsWith(extension)
            }
        }
    }
}

谢谢你的帮助!

grails groovy
1个回答
0
投票

你没有提到你的grails版本。我假设它的3+

在application.yml中,您可以使用这些设置设置要上载的文件的最大大小。

grails:
controllers:
        upload:
            maxFileSize: 20000000
            maxRequestSize: 20000000

此示例将请求和文件大小设置为20MB。您可以根据自己的需要进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.