141 votes

Comment définir la taille maximale du fichier à télécharger

Je développe une application basée sur Spring Boot et AngularJS en utilisant JHipster. Ma question est comment définir la taille maximale des fichiers téléchargés ?

Si j'essaie de télécharger un fichier trop volumineux, j'obtiens cette information dans la console :

  DEBUG 11768 --- [io-8080-exec-10] c.a.app.aop.logging.LoggingAspect: 

Enter: com.anuglarspring.app.web.rest.errors.ExceptionTranslator.processRuntimeException() avec argument[s] = 

[org.springframework.web.multipart.MultipartException: Impossible d'analyser la requête servlet multipart ; l'exception imbriquée est java.lang.IllegalStateException: 

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: Le champ du fichier dépasse sa taille maximale autorisée de 1048576 octets.]

Et le serveur répond avec un statut 500.

Comment configurer cela ?

226voto

BahadirTasdemir Points 87

Aussi dans Spring boot 1.4, vous pouvez ajouter les lignes suivantes à votre fichier application.properties pour définir la limite de taille du fichier :

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

pour spring boot 2.x et supérieur c'est :

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

Cela a fonctionné pour moi. Source : https://spring.io/guides/gs/uploading-files/

MISE À JOUR :

Quelqu'un a demandé les différences entre les deux propriétés.

Voici les définitions formelles :

MaxFileSize : La taille maximale autorisée pour les fichiers téléchargés, en octets. Si la taille de n'importe quel fichier téléchargé est supérieure à cette taille, le conteneur web lancera une exception (IllegalStateException). La taille par défaut est illimitée.

MaxRequestSize : La taille maximale autorisée pour une requête multipart/form-data, en octets. Le conteneur web lancera une exception si la taille totale de tous les fichiers téléchargés dépasse ce seuil. La taille par défaut est illimitée.

Pour expliquer chacun :

MaxFileSize : La limite pour un seul fichier à télécharger. Cela s'applique uniquement à la limite d'un seul fichier.

MaxRequestSize : La limite pour la taille totale de tous les fichiers dans une seule requête de téléchargement. Cela vérifie la limite totale. Disons que vous avez deux fichiers a.txt et b.txt pour une seule demande de téléchargement. a.txt fait 5ko et b.txt fait 7ko donc le MaxRequestSize doit être supérieur à 12ko.

9 votes

J'ai utilisé ce qui suit dans Spring Boot 2.0.1 spring.servlet.multipart.max-file-size = 5MB spring.servlet.multipart.max-request-size = 5MB

1 votes

Quelle est la différence entre max-file-size et max-request-size?

3 votes

max-file-size --> taille maximale pour un seul fichier à téléverser. max-request-size --> la limite pour la taille totale de tous les fichiers dans une seule demande de téléversement. Donc, si vous souhaitez augmenter la taille de téléversement, vous devez augmenter les deux valeurs car l'une est pour la limite d'un fichier unique et l'autre est pour la taille totale de tous les fichiers dans une seule demande.

33voto

Allar Saarnak Points 61

Dans Spring Boot 2, le spring.http.multipart a changé en spring.servlet.multipart

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes#multipart-configuration

0 votes

Bénissez-vous, monsieur !!

0 votes

Tu as sauvé ma journée !

0 votes

Qu'est-ce qui a incité les gars de Pivotal à effectuer ce changement ? Je pense que cela pourrait être excessif pour la mise à niveau de Spring Boot vers Spring Boot 2.

24voto

geraldhumphries Points 1058

Vous devez définir les paramètres multipart.maxFileSize et multipart.maxRequestSize sur des valeurs plus élevées que la valeur par défaut. Cela peut être fait dans vos fichiers de configuration spring boot yml. Par exemple, en ajoutant ce qui suit à application.yml, les utilisateurs pourront télécharger des fichiers de 10 Mo :

multipart:
    maxFileSize: 10Mo
    maxRequestSize: 10Mo

Si l'utilisateur doit être capable de télécharger plusieurs fichiers dans une seule requête et qu'ils peuvent totaliser plus de 10 Mo, alors vous devrez configurer multipart.maxRequestSize sur une valeur plus élevée :

multipart:
    maxFileSize: 10Mo
    maxRequestSize: 100Mo

Source: https://spring.io/guides/gs/uploading-files/

3 votes

J'ai ajouté ceci: http: multipart: maxFileSize: 100Mb maxRequestSize: 100Mb à la section spring mais cela n'a pas aidé.

2 votes

@tibi si vous utilisez Sprint Boot 1.4.x, consultez la réponse du webmaster car cette propriété a changé.

17voto

sk api Points 14

Il y a quelques différences lorsque nous définissons les propriétés dans les fichiers application.properties et application yaml.

Dans application.yml :

spring:
    http:
      multipart:
       max-file-size: 256KB
       max-request-size: 256KB

Et dans application.propeties :

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

Note : Version de Spring 4.3 et Spring Boot 1.4

8voto

MobileMateo Points 63

Plus précisément, dans votre fichier de configuration application.yml, ajoutez ce qui suit à la section "spring:".

http:
    multipart:
        max-file-size: 512MB
        max-request-size: 512MB

Les espaces sont importants et vous ne pouvez pas utiliser des tabulations pour l'indentation.

0 votes

Si cette propriété doit être définie à la fois en développement et en production, il suffit de l'ajouter à application.yml pour qu'elle se propage à ces deux profils, vous n'avez donc pas besoin de la définir deux fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X