J'écris une API en utilisant Spring + apache commons.Vérification de la taille réelle du fichier lors de la diffusion de fichiers avec FileItemStream
https://commons.apache.org/proper/commons-fileupload/
Il y a un problème que je faisais face. Je dois valider une taille de fichier. Si c'est plus gros que celui que je configure, l'utilisateur devrait avoir une erreur. Pour l'instant, je mis en œuvre le téléchargement sans cette vérification et il ressemble à ceci:
public ResponseEntity insertFile(@PathVariable Long profileId, HttpServletRequest request) throws Exception {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator uploadItemIterator = upload.getItemIterator(request);
if (!uploadItemIterator.hasNext()) {
throw new FileUploadException("FileItemIterator was empty");
}
while (uploadItemIterator.hasNext()) {
FileItemStream fileItemStream = uploadItemIterator.next();
if (fileItemStream.isFormField()) {
continue;
}
//do stuff
}
return new ResponseEntity(HttpStatus.OK);
}
Il fait exactement ce que je dois. Cela ne me demande pas de charger complètement le fichier dans la mémoire. J'utilise InputStream que je dois effectuer un transfert ultérieur vers un autre service. Finalement, je n'ai pas de fichier chargé dans la mémoire complètement à tout moment. Cependant, cela m'empêche d'obtenir le nombre total de piqûres qui ont été chargées.
Existe-t-il un moyen de gérer une telle validation sans télécharger le fichier complètement ou l'enregistrer quelque part?
J'ai essayé FileItem, mais cela nécessite un chargement complet du fichier.
Celui-ci fait le travail. Merci! Je comprends toute l'importance de ne pas faire confiance aux en-têtes. Cependant, dans mon cas, je n'ai pas d'options. Le service auquel je transfère doit échouer, mon travail consiste simplement à donner à l'utilisateur une exception conviviale et à ne pas effectuer tout le travail supplémentaire pendant le transfert du fichier. – dvelopp
Il semble que l'exception ne se produise que lorsqu'une partie du fichier est traitée. Donc, si la taille maximale est de 5 Go, je dois d'abord traiter 5 Go pour comprendre si le fichier correspond à mes exigences ou non. Je sautillais qu'il devrait y avoir un moyen de le dire sur la scène de validation (avant de télécharger) – dvelopp
Vous pouvez le vérifier sur le client du service avant de l'envoyer. Est-ce vous qui développez aussi? HTML + JavaScript n'est-ce pas? Est-ce sous forme de téléchargement? – Joao