Ограничение размера загружаемого файла Grails 3


Что я делаю и что случилось?


Я пытаюсь загрузить файлы в grails и загрузить их. После того, как я это сделал, я все еще сталкиваюсь с проблемой, когда размер файла большой. Вот исключение:

Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: 
the request was rejected because its size (3553808) exceeds the configured maximum (128000)

Что я пробовал и результат:


Я обнаружил, что это задано ранее в этом вопросе, и ответ состоит в том, чтобы поместить несколько переменные конфигурации:

grails:
    controllers:
        upload:
            maxFileSize: (10 * 1024 * 1024)
            maxRequestSize: (10 * 1024 * 1024)

Но по-прежнему возникает та же ошибка. Я также попытался добавить некоторые зависимости, как указано . Или закройте IDE и пересоберите. И ничего нельзя было решить.


Кто-нибудь сталкивался с этой проблемой и смог ее решить?


person IgniteCoders    schedule 11.04.2018    source источник
comment
Пробовали ли вы какие-либо другие ответы на связанный вопрос, например эту конфигурацию компонента?   -  person doelleri    schedule 11.04.2018
comment
Я пробовал, но не смог разрешить импорт   -  person IgniteCoders    schedule 11.04.2018
comment
Я попробовал еще раз в сочетании с compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.3'. Это решило проблему, но не может найти файл в запросе, как раньше.   -  person IgniteCoders    schedule 11.04.2018
comment
В ответе с конфигурацией bean-компонента также говорилось, что нет необходимости в каких-либо зависимостях или дополнительной настройке.   -  person IgniteCoders    schedule 11.04.2018
comment
Возможно, ваш контейнер развертывания обеспечивает соблюдение этого ограничения? Как вы запускаете/развертываете свое приложение?   -  person Daniel    schedule 11.04.2018
comment
Я запускаю его в IntelliJ IDEA   -  person IgniteCoders    schedule 11.04.2018


Ответы (2)


Проблема в назначении переменных cofig. Я присваиваю их без операторов:

        maxFileSize: 10485760
        maxRequestSize: 10485760

Вместо:

        maxFileSize: (10 * 1024 * 1024)
        maxRequestSize: (10 * 1024 * 1024)

Вот как я решил проблему.

person IgniteCoders    schedule 12.04.2018
comment
Удалось ли вам поймать исключение FileUploadBase$SizeLimitExceededException, если размер загрузки больше настроенного? - person Pablo Pazos; 12.06.2020
comment
Извини! Я не помню, как он себя вел, больше 2 лет не прикасался к этой темери :С - person IgniteCoders; 12.06.2020

После того, как я отлично работаю с Grails версии 3.2 и выше

Мы собираемся разрешить загрузку файлов размером 25 МБ.

25 * 1024 * 1024 = 26 214 400 байт

Мой /grails-app/conf/application.yml

grails:
 controllers:
  upload:
    maxFileSize: 26214400
    maxRequestSize: 26214400

Мой my.gsp файл

<g:form action="saveImage" enctype="multipart/form-data" method="POST">

    <input type="file" placeholder="Select file" name="file">

    <g:submitButton value="Upload File"/>

</g:form>

Мое действие controller

def saveImage(){
def fileName = ''
def uploadedFile = request.getFile('file')

if (uploadedFile)
    if (!uploadedFile.empty) {
        try {

            int dot = uploadedFile.originalFilename.lastIndexOf('.');
            def fileExt = uploadedFile.originalFilename.substring(dot + 1);
            fileName = ("myFile." + fileExt).toString()
            def basePath = ''
            if (Environment.current == Environment.PRODUCTION) {
                basePath ='/var/local/prj/uploads/' // this works with production and tested on Ubuntu OS
            } else {
                basePath = grailsApplication.mainContext.servletContext.getRealPath('/uploads/') // this will take your project directory path Project\src\main\webapp\uploads folder
            }
            uploadedFile.transferTo(new File(basePath + fileName))
        } catch (Exception e) {
            e.printStackTrace()
        }
    }
    // Your redirect code here
}

Действие "Загрузить файл"

def file = new File("Your file path")
if (file.exists()) {
    response.setContentType("application/octet-stream") // or or image/JPEG or text/xml or whatever type the file is
    response.setHeader("Content-disposition", "attachment;filename=\"${file.name}\"")
    response.outputStream << file.bytes
} else 
    render "File does not exist!"

Надеюсь, это поможет вам

person Rahul Mahadik    schedule 11.04.2018
comment
Примечание. Работа с IntelliJ IDEA 2016/2017/2018 :) - person Rahul Mahadik; 11.04.2018
comment
@IgniteCoders, каков размер файла, который вы пытаетесь загрузить? - person Rahul Mahadik; 12.04.2018
comment
Я пытаюсь загрузить файлы разного размера. от 10 до 2 Мб. Но я решил это, наконец, посмотрите на мой ответ. - person IgniteCoders; 12.04.2018
comment
Я думаю, что я также упомянул то же самое :) проверьте maxFileSize: 26214400 and maxRequestSize: 26214400 - person Rahul Mahadik; 12.04.2018
comment
Да, но я никогда не думал, что это может быть проблемой. Поскольку я не получил никакой ошибки, конфигурация просто принимает значение по умолчанию и пропускает шахту. - person IgniteCoders; 12.04.2018
comment
и как бороться с исключениями, если файл больше лимита? - person Pablo Pazos; 15.10.2019
comment
@PabloPazos Размер загружаемых файлов Grails по умолчанию составляет 128000 (~ 128 КБ). При превышении этого лимита вы увидите исключение: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException - person Rahul Mahadik; 15.10.2019
comment
да, но это исключение AFAIK выдается перед контроллером, так где же ловить? - person Pablo Pazos; 15.10.2019