J'utilise la bibliothèque Apache commons fileupload 1.4 dans mon projet Java. J'ai une partie html avec un formulaire classique avec un champ de fichier et quelques champs cachés.
J'ai un problème avec le téléchargement de fichiers d'environ >500ko uniquement avec Firefox >= 52
Cela fonctionne bien avec des fichiers de 10mo dans Chrome ou Internet Explorer. Mais avec Firefox, j'ai une expiration après avoir attendu plusieurs minutes après avoir soumis le formulaire.
Après quelques debuggages, je vois que le code responsable de l'expiration est :
List items = (new ServletFileUpload(new DiskFileItemFactory())).parseRequest(request);
La partie qui cause l'attente est "parseRequest".
J'essaie de déboguer le contenu de la requête avec le débogueur dans IntelliJ, mais il n'y a aucun moyen de copier la valeur du contenu entier de cet objet requête au format brut.
Cela fonctionne dans ces cas : - Firefox : version <= 52 ou taille du fichier < 500ko (environ, ce n'est pas très précis) - Internet Explorer - Chrome
Il n'y a pas de limite de taille de fichier, il semble que cela dépend de la taille de la requête, car la partie d'analyse de la requête prend trop de temps...
Je reçois la requête HTTP avec une extension Firefox dans deux cas. L'un générant le téléchargement d'un fichier de 3mo qui ne fonctionne pas (le fichier de requête est énorme, 3x la taille du fichier téléchargé) : https://code.empreintesduweb.com/13561.html
L'autre généré en téléchargeant un fichier de 200ko qui fonctionne (le fichier de requête est petit) : https://code.empreintesduweb.com/13560.html
En fait, la principale différence est que dans Chrome ou IE, je n'ai pas le contenu brut du fichier téléchargé dans les en-têtes de la requête :
La partie avec : obj stream .... endstream endobj
Apparaît uniquement avec Firefox...