zamiast zapisywać go na dysku C, mam zamiar uruchomić go na serwerze, ale gdzie powinienem przechowywać obraz, aby później pobrać i wyświetlić w pliku xhtml?
To zależy od tego, ile masz kontroli nad konfiguracją serwera. Idealnym rozwiązaniem byłoby skonfigurowanie stałej ścieżki poza folderem aplikacji internetowych Tomcat. Na przykład /var/webapp/upload
. Możesz ustawić tę ścieżkę jako argument maszyny wirtualnej lub zmienną środowiskową, aby aplikacja internetowa mogła ją pobrać programowo bez konieczności zmiany kodu.
Na przykład podczas określania jako argument maszyny wirtualnej -Dupload.location=/var/webapp/upload
, możesz dokończyć przesyłanie w następujący sposób:
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.
Jeśli chodzi o obsługę pliku z powrotem, najbardziej idealnym rozwiązaniem byłoby dodanie lokalizacji przesyłania jako oddzielnego <Context>
do Tomcata. Np.
<Context docBase="/var/webapp/upload" path="/uploads" />
W ten sposób możesz uzyskać do niego bezpośredni dostęp przez http://example.com/uploads/foo-123456 .ex
Jeśli nie masz żadnej kontroli nad konfiguracją serwera, najlepszym rozwiązaniem jest przechowywanie w bazie danych lub wysyłanie do hosta innej firmy, takiego jak Amazon S3.
Zobacz też:
- Jak podać ścieżkę względną w klasie File, aby przesłać dowolny plik?
- Niezawodne udostępnianie danych