Как увеличить лимит загрузки файлов при весенней загрузке с помощью встроенного tomcat - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь загрузить файл, используя мой API весенней загрузки. Функция работает нормально, когда я использую небольшой файл (менее 1 МБ), но когда я загружаю большой файл, это дает мне исключение. Я использую встроенный сервер Tomcat.

"Превышен максимальный размер загрузки; вложенное исключение: java .lang.IllegalStateException: org. apache .tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: Файл поля превышает свой максимум разрешенный размер 1048576 байт. "

Я пробовал следующий код в моих файлах, но каждый раз, когда я получаю сообщение об ошибке

1. application.property

server.tomcat.max-swallow-size = 100MB

server.tomcat.max-http-post-size = 100MB

spring. servlet.multipart.enabled = true

spring.servlet.multipart.fileSizeThreshold = 100 МБ

spring.servlet.multipart.max-file-size = 100 МБ

spring.servlet .multipart.max-request-size = 100MB

Я также пытался

spring.servlet.multipart.maxFileSize = 100MB

spring.servlet.multipart.maxRequestSize = 100MB

2. Возлюбленный мой код загрузки файлов

public RestDTO uploadFile(MultipartFile file, String subPath) {

    if (file.isEmpty()) {
        return new RestFailure("Failed to store empty file");
    }

    try {
        String fileName = new Date().getTime() + "_" + file.getOriginalFilename();
        String filePath = uploadPath + subPath + fileName;
        if (Objects.equals(file.getOriginalFilename(), "blob")) {
            filePath += ".png";
            fileName += ".png";
        }
        File uploadDir = new File(uploadPath + subPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }
        FileOutputStream output = new FileOutputStream(filePath);
        output.write(file.getBytes());
        LOGGER.info("File path : " + filePath);

        MediaInfoDTO mediaInfoDTO = getThumbnailFromVideo(subPath, fileName);

        String convertedFileName = convertVideoToMP4(subPath, fileName);

        System.out.println("---------------->" + convertedFileName);

        return new RestData<>(new MediaDetailDTO(mediaInfoDTO.getMediaPath(), convertedFileName,
                mediaInfoDTO.getMediaType(), mediaInfoDTO.getMediaCodec(), mediaInfoDTO.getWidth(),
                mediaInfoDTO.getHeight(), mediaInfoDTO.getDuration()));
    } catch (IOException e) {
        LOGGER.info("Can't upload file: " + e.getMessage());
        return new RestFailure("Failed to store empty file");
    }
}

, но каждый раз я получаю одно и то же исключение.

1 Ответ

0 голосов
/ 06 марта 2020

Помимо комментариев, я мог бы предложить создать @Bean для Фабрики MultipartConfigurationElement Это в основном должно переопределить другие ограничения, если у вас есть какие-либо со стороны TomCat.

@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setMaxFileSize(DataSize.ofBytes(100000000L));
    factory.setMaxRequestSize(DataSize.ofBytes(100000000L));
    return factory.createMultipartConfig();
}

Здесь DataSize имеет тип org.springframework.util.unit.DataSize

Ссылка https://github.com/spring-projects/spring-boot/issues/11284

Другая проблема, которую я подозреваю, может быть связана с TomCat maxSwallowSize, см. Пункт №5 Baeldung, если выше не работает. https://www.baeldung.com/spring-maxuploadsizeexceeded

...