Invece di scriverlo sull'unità C, lo eseguirò sul server, ma dove dovrei archiviare l'immagine per recuperarla in seguito e visualizzarla in un file xhtml?
Dipende da quanto controllo hai sulla configurazione del server. L'ideale sarebbe configurare un percorso fisso all'esterno della cartella delle app Web Tomcat. Ad esempio, /var/webapp/upload
. Puoi impostare questo percorso come argomento VM o variabile di ambiente in modo che la tua webapp possa recuperarlo a livello di codice senza la necessità di modificare il codice.
Ad esempio, quando si specifica come argomento VM -Dupload.location=/var/webapp/upload
, puoi completare il caricamento come segue:
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.
Per quanto riguarda la restituzione del file, l'ideale sarebbe aggiungere il percorso di caricamento come <Context>
separato a Tomcat. Es.
<Context docBase="/var/webapp/upload" path="/uploads" />
In questo modo puoi accedervi direttamente da http://example.com/uploads/foo-123456 .ext
Se non hai il controllo sulla configurazione del server, allora, l'archiviazione nel DB o l'invio a un host di terze parti come Amazon S3 è la soluzione migliore.
Vedi anche:
- Come fornire il percorso relativo nella classe File per caricare qualsiasi file?
- Servizio dati affidabile