Comment définir la taille maximale de téléchargement de fichiers

je développe une application basée sur la botte à ressort et AngularJS en utilisant JHipster. Ma question Est de savoir comment définir taille maximale des fichiers de téléchargement ?

si j'essaie de télécharger vers un gros fichier, je reçois 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() with argument[s] = 

[org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 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.]

et réponse du serveur avec statut 500.

Comment régler ça?

31
demandé sur kryger 2016-05-31 10:57:26

12 réponses

également dans la botte de printemps 1.4, vous pouvez ajouter les lignes suivantes à votre application.propriétés pour définir la limite de taille du fichier:

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

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

48
répondu Bahadir Tasdemir 2016-09-16 15:00:51

vous devez définir les paramètres multipart.maxFileSize et multipart.maxRequestSize à des valeurs plus élevées que la valeur par défaut. Cela peut être fait dans vos fichiers de configuration de démarrage de printemps yml. Par exemple, l'ajout de ce qui suit à application.yml permettra aux utilisateurs de télécharger des fichiers de 10 Mo:

multipart:
    maxFileSize: 10Mb
    maxRequestSize: 10Mb

si l'Utilisateur a besoin de pouvoir 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 à une valeur plus élevée:

multipart:
    maxFileSize: 10Mb
    maxRequestSize: 100Mb

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

15
répondu geraldhumphries 2016-05-31 16:47:57

il y a une différence lorsque nous définissons les propriétés dans l'application.propriétés et application yaml.

en application.yml:

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

et en application.propeties:

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

Note: version à ressort 4.3 et botte à ressort 1.4

12
répondu denzal 2017-01-17 11:21:28

dans la botte de printemps 2 le spring.http.multipart changé en spring.servlet.multipart

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

6
répondu Allar Saarnak 2017-06-16 07:57:32

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

espace blanc est important et vous ne peut pas utiliser les onglets pour l'indentation .

5
répondu MobileMateo 2017-01-03 17:28:10

Pour Botte De Printemps 2.+ , assurez-vous que vous utilisez spring.servlet au lieu de spring.http .

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

si vous devez utiliser tomcat, vous pourriez finir par créer EmbeddedServletContainerCustomizer , ce qui n'est pas vraiment une bonne chose à faire.

si vous pouvez vivre sans tomat, vous pouvez remplacer tomcat avec par exemple sous-entendu et éviter ce problème du tout.

4
répondu Ondrej Kvasnovsky 2018-02-01 18:50:47

je sais que c'est extrêmement tard pour le jeu, mais je voulais poster le problème supplémentaire que j'ai rencontré en utilisant mysql, si quelqu'un fait face à la même question à l'avenir.

comme certaines des réponses mentionnées ci-dessus, le réglage de ces derniers dans la demande.propriétés sera la plupart du temps de résoudre le problème

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

je le mets à 16 Mo, parce que j'utilise mysql MEDIUMBLOB datatype pour stocker le fichier.

mais après avoir fixé le application.propriétés, lors du chargement d'un fichier > 4MB a donné l'erreur: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [insert into test_doc (doc_id, duration_of_doc, doc_version_id, file_name, doc) values (?, ?, ?, ?, ?)]; Le paquet de requête est trop grand (6656781 > 4194304). Vous pouvez modifier cette valeur sur le serveur en paramétrant la variable max_allowed_packet'.; l'exception imbriquée est com.mysql.jdbc.PacketTooBigException: le paquet pour la requête est trop grand (6656781 > 4194304). Vous pouvez modifier cette valeur sur le serveur en paramétrant la variable max_allowed_packet'.

alors j'ai lancé cette commande de mysql:

SET GLOBAL max_allowed_packet = 1024*1024*16;
2
répondu she12 2017-12-27 01:27:37

j'ai trouvé la solution chez Expert Exchange, qui a bien fonctionné pour moi.

@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setMaxFileSize("124MB");
    factory.setMaxRequestSize("124MB");
    return factory.createMultipartConfig();
}

Réf: https://www.experts-exchange.com/questions/28990849/How-to-increase-Spring-boot-Tomcat-max-file-upload-size.html

2
répondu Askerali Maruthullathil 2018-05-17 08:10:30

ces propriétés dans l'application de botte de printemps.propriétés rend la taille de fichier acceptable illimité -

# To prevent maximum upload size limit exception
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1
2
répondu thedevd 2018-07-05 09:12:23

si vous obtenez une erreur" connection resets", le problème pourrait être dans le connecteur par défaut Tomcat maxSwallowSize attribut ajouté à partir de Tomcat 7.0.55 ( ChangeLog )

De Apache Tomcat 8 Référence De Configuration

maxSwallowSize : Le nombre maximum d'octets de corps de requête (à l'exclusion de l'encodage de transfert) les frais généraux) qui sera avalé par Tomcat pour un téléchargement avorté. Un abandonnée télécharger, c'est quand Tomcat sait que le corps de la requête va être ignoré mais le client l'envoie quand même. Si Tomcat n'avale pas le corps, le client est peu probable de voir la réponse. Si non spécifié la valeur par défaut de 2097152 (2 mégaoctets) sera utilisée. Une valeur de moins de que zéro indique qu'aucune limite doit être appliquée.

pour poutrelles encastrées Tomcat déclarer un Tomcatembeddedservlet containerfactory

Java 8:

@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
        if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
            //-1 for unlimited
            ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
        }
    });
    return tomcat;
}

Java 7:

@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer()  {
        @Override
        public void customize(Connector connector) {
            if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
                //-1 for unlimited
                ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
            }
        }
    });
    return tomcat;
}

ou dans le Tomcat/conf/server.xml pour 5MB

<Connector port="8080" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443"
       maxSwallowSize="5242880" />
1
répondu Alex 2018-05-17 08:12:23

aucune des configurations ci-dessus ne fonctionnait pour moi avec une application de ressort.

implémentant ce code dans la classe principale application (celle annotée avec @SpringBootApplication) a fait l'affaire.

@Bean 
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
     return (ConfigurableEmbeddedServletContainer container) -> {

              if (container instanceof TomcatEmbeddedServletContainerFactory) {

                  TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
                  tomcat.addConnectorCustomizers(
                          (connector) -> {
                              connector.setMaxPostSize(10000000);//10MB
                          }
                  );
              }
    };
}

vous pouvez changer la taille acceptée dans la déclaration:

connecteur.setMaxPostSize (10000000);//10MB

0
répondu Tomer Shay 2018-05-17 08:11:34

j'utilise spring-boot-1.3.5.RELEASE et j'ai eu le même problème. Aucune des solutions ci-dessus ne me convient. Mais finalement ajouter la propriété suivante à application.properties a été corrigé le problème.

multipart.max-file-size=10MB
0
répondu Chathura Buddhika 2018-10-03 11:33:50