web-dev-qa-db-fra.com

Erreur de limite de taille de fichier de téléchargement de printemps

J'utilise Spring Boot et je peux envoyer des images inférieures à 1 Mo, mais lorsque je fais une demande de publication avec une grande image supérieure à 1 Mo, j'obtiens cette erreur:

Maximum upload size exceeded; nested exception is Java.lang.IllegalStateException:org.Apache.Tomcat.util.
http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.

J'ai parcouru tellement d'endroits pour essayer de trouver la réponse à cette erreur. J'ai examiné toutes ces questions et essayé d'implémenter ce qu'elles suggèrent en vain: Limite de taille du fichier de téléchargement de printemps , J'essaie de définir maxFileSize mais ce n'est pas honoré , org.Apache.Tomcat.util.http.fileupload.FileUploadBase $ FileSizeLimitExceededException , et Max Limit of MultipartFile in spring boot

J'utilise la version 2.0.3 de Spring et voici mon post mapping:

    @PostMapping("/post")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
      String message = "";
      try {
        storageService.store(file);
        files.add(file.getOriginalFilename());

        message = "You successfully uploaded " + file.getOriginalFilename() + "!";
        return ResponseEntity.status(HttpStatus.OK).body(message);
      } catch (Exception e) {
      message = "FAIL to upload " + file.getOriginalFilename() + "!";
      return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(message);
  }

}

Et voici toute la configuration application.properties que j'ai essayée:

1

spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1

2

spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB

3

spring.http.multipart.max-file-size=5MB
spring.http.multipart.max-request-size=5MB

4

multipart.max-file-size=5MB
multipart.max-request-size=5MB

5

server.Tomcat.max-file-size=5000000

6

server.Tomcat.max-http-post-size=5000000

sept

spring.servlet.multipart.maxFileSize=-1
spring.servlet.multipart.maxRequestSize=-1

Même essayé de le changer en application.yml:

spring:
  servlet:
    multipart:
      max-file-size: 5MB
      max-request-size: 5MB

J'ai également cherché à modifier la taille de la demande autorisée par Tomcat dans le fichier web.xml, mais je n'ai pas de fichier web.xml. Le Tomcat que j'utilise est intégré à l'application.

6
Ryan Fasching

Ajoutez les lignes ci-dessous dans application.properties pour la version Spring Boot 2.0.0.RELEASE et versions supérieures -

spring.servlet.multipart.max-file-size=128MB
spring.servlet.multipart.max-request-size=128MB
spring.servlet.multipart.enabled=true

Veuillez noter pour les versions inférieures, c'est-à-dire 1.5.9.RELEASE et ci-dessous la configuration était la suivante:

spring.http.multipart.max-file-size = 20MB
spring.http.multipart.max-request-size = 20MB
13
vikash singh

Selon la dernière propriétés communes de Spring Boot ci-dessous devrait fonctionner

MULTIPART (MultipartProperties)

spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0 # Threshold after which files are written to disk. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.max-request-size=10MB # Max request size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.

ou Si vous souhaitez simplement contrôler les propriétés en plusieurs parties, alors multipart.max-file-size et multipart.max-request-size les propriétés devraient fonctionner.

multipart.max-file-size=5MB
multipart.max-request-size=5MB
0
kj007

Avez-vous essayé cela?

spring.http.multipart.maxFileSize = 20MB
spring.http.multipart.maxRequestSize = 20MB

OR

spring.http.multipart.max-file-size = 20MB
spring.http.multipart.max-request-size = 20MB

Fonctionne pour moi avec Spring Boot 1.5.x

0
T.Rex

C'est ce que j'ai et cela fonctionne parfaitement pour moi pour le backend.

@PutMapping(value = USER_PROFILE_UPDATE_URL_MAPPING)
  public String updateProfile(
      @ModelAttribute(AUTHORIZED_USER_MODEL_KEY) User user,
      BindingResult bindingResult,
      @RequestParam(name = "file") MultipartFile multipartFile,
      Model model, @RequestParam Map<String, String> params) {

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    User authorizedUser = (User) authentication.getPrincipal();
    //.... 

      return REDIRECT_TO_LOGIN;
    }

Et dans le fichier bootstrap.yml, j'aurai simplement quelque chose comme ça ... qui ne permettra que la taille maximale du fichier de 2 mégaoctets.

---
spring:
  servlet:
    multipart:
      max-file-size: 2MB
      max-request-size: 2MB

et enfin, dans mon fichier HTML, j'aurai quelque chose comme ça ...

<form id="profileForm"
   th:action="@{/update}"
   th:object="${user}"
   method="post" enctype="multipart/form-data">

   <!-- This will modify the method to PUT to match backend -->
   <input type="hidden" name="_method" value="PUT">

   ...

   <div class="col-md-3">
      <div class="form-group row">
         <label for="file" class="custom-file">
           <input name="file" type="file" id="file" aria-describedby="fileHelpId"  class="form-control-file btn btn-outline-info">
          </label>
          <small id="fileHelpId" class="form-text text-muted">Maximum size should be 2MB</small>
       </div>
   </div>

Et cela devrait parfaitement fonctionner. J'utilise également Spring Boot 2.0.3

0
Knight Rider