Printemps - Comment diffuser de la grande multipart les uploads de fichier de base de données sans avoir à les stocker sur le système de fichiers local
Printemps de démarrage par défaut de MultiPartResolver interface gère le téléchargement de fichiers en plusieurs parties en les stockant sur le système de fichiers local. Avant la méthode de contrôleur est entré, l'ensemble du fichier en plusieurs parties doit terminer le téléchargement vers le serveur.
Nous sommes le stockage de tous nos fichiers téléchargés directement à une base de données et nos serveurs ont une très faible quota de disque, donc si un gros fichier est téléchargé, nous assistons à une IOExeption - Disk quota exceeded
.
Est-il un moyen pour obtenir le stream directement depuis le client de la demande entrante avant le Printemps de l'MultiPartResolver stocke le fichier sur le système de fichiers local si l'on peut diffuser directement à notre db?
- La base de données que vous utilisez?
- Nous sommes à l'aide d'AWS S3
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser apache directement, comme décrit ici https://commons.apache.org/proper/commons-fileupload/streaming.html.
Assurez-vous de désactiver les ressorts multi-parties de résoudre mécanisme.
application.yml:
En fait ce n'est pas une tâche triviale. Si vous souhaitez écrire flux de droit du client à la base de données, vous avez à traiter la demande manuellement. Il y a quelques bibliothèques, qui peuvent rendre cette tâche plus simple. L'un d'eux est "Apache Commons FileUpload". Ci-dessous exemple très simple, comment pouvez-vous traiter
multipart/form-data
demande par cette bibliothèque.En-tête de champ de fichier ressemble à ceci:
En-tête pour un simple champ ressemble:
Noter que ce morceau de code est juste simplifié exemple pour vous montrer la direction. Il n'y a pas de certains détails comme: extrait de nom de champ d'en-tête, créer la base de données de flux de sortie etc. Vous pouvez mettre en œuvre toutes ces choses par vous-même.
Des exemples de plusieurs parties de la demande en-têtes de champ que vous pouvez trouver dans RFC1867. Informations sur
multipart/form-data
RFC2388."Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" -F "filename=test" -F "[email protected]"