вместо да го запиша на моето C устройство, ще го стартирам на сървъра, но къде трябва да съхранявам изображението, за да го извлека по-късно и да го покажа в xhtml файл?
Това зависи от това колко контрол имате върху конфигурирането на сървъра. Идеално би било да конфигурирате фиксиран път извън папката на Tomcat webapps. Например /var/webapp/upload
. Можете да зададете този път като аргумент на VM или променлива на средата, така че вашето уеб приложение да може да го извлича програмно, без да е необходимо да променяте кода.
Например, когато посочвате като VM аргумент -Dupload.location=/var/webapp/upload
, можете да завършите качването по следния начин:
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.
Що се отнася до връщането на файла, най-идеалното би било да добавите местоположението за качване като отделен <Context>
към Tomcat. Напр.
<Context docBase="/var/webapp/upload" path="/uploads" />
По този начин можете да получите достъп до него директно от http://example.com/uploads/foo-123456 .ext
Ако нямате нулев контрол върху конфигурирането на сървъра, тогава, добре, най-добрият залог е съхраняването в DB или изпращането до хост на трета страна, като Amazon S3.
Вижте също:
- Как да предоставим относителен път в класа File за качване на всеки файл?
- Надеждно обслужване на данни