anstatt es auf mein C-Laufwerk zu schreiben, werde ich es auf dem Server ausführen, aber wo soll ich das Bild speichern, um es später abzurufen und in einer xhtml-Datei anzuzeigen?
Das hängt davon ab, wie viel Kontrolle Sie über die Konfiguration des Servers haben. Ideal wäre es, einen festen Pfad außerhalb des Tomcat-Webapps-Ordners zu konfigurieren. Beispiel:/var/webapp/upload
. Sie können diesen Pfad als VM-Argument oder Umgebungsvariable festlegen, sodass Ihre Webanwendung ihn programmgesteuert abrufen kann, ohne dass der Code geändert werden muss.
Wenn Sie beispielsweise -Dupload.location=/var/webapp/upload
als VM-Argument angeben , können Sie den Upload wie folgt abschließen:
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.
Um die Datei zurückzuliefern, wäre es am besten, den Upload-Speicherort als separaten <Context>
hinzuzufügen zu Kater. Z. B.
<Context docBase="/var/webapp/upload" path="/uploads" />
Auf diese Weise können Sie direkt über http://example.com/uploads/foo-123456 darauf zugreifen .ext
Wenn Sie keine Kontrolle über die Konfiguration des Servers haben, dann ist das Speichern in der DB oder das Senden an einen Drittanbieter-Host wie Amazon S3 die beste Wahl.
Siehe auch:
- Wie gebe ich einen relativen Pfad in der Dateiklasse an, um eine beliebige Datei hochzuladen?
- Zuverlässige Datenbereitstellung