au lieu de l'écrire sur mon lecteur C, je vais l'exécuter sur le serveur, mais où dois-je stocker l'image pour la récupérer ultérieurement et l'afficher dans un fichier xhtml ?
Cela dépend du degré de contrôle que vous avez sur la configuration du serveur. L'idéal serait de configurer un chemin fixe en dehors du dossier des applications Web de Tomcat. Par exemple, /var/webapp/upload
. Vous pouvez définir ce chemin en tant qu'argument de machine virtuelle ou variable d'environnement afin que votre application Web puisse le récupérer par programmation sans avoir à modifier le code.
Par exemple, lorsque vous spécifiez comme argument VM -Dupload.location=/var/webapp/upload
, vous pouvez terminer le téléchargement comme suit :
Path folder = Paths.get(System.getProperty("upload.location"));
String filename = FilenameUtils.getBaseName(uploadedFile.getName());
String extension = FilenameUtils.getExtension(uploadedFile.getName());
Path file = Files.createTempFile(folder, filename + "-", "." + extension);
try (InputStream input = uploadedFile.getInputStream()) {
Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING);
}
String uploadedFileName = file.getFileName().toString();
// Now store it in DB.
En ce qui concerne la restitution du fichier, l'idéal serait d'ajouter l'emplacement de téléchargement en tant que <Context>
distinct à Tomcat. Par exemple
<Context docBase="/var/webapp/upload" path="/uploads" />
De cette façon, vous pouvez y accéder directement par http://example.com/uploads/foo-123456 .ext
Si vous n'avez aucun contrôle sur la configuration du serveur, alors, eh bien, le stockage dans la base de données ou l'envoi à un hôte tiers tel qu'Amazon S3 est votre meilleur pari.
Voir aussi :
- Comment fournir un chemin relatif dans la classe File pour télécharger n'importe quel fichier ?
- Service de données fiable