daripada menulisnya ke drive C saya, saya akan menjalankannya di server, tetapi di mana saya harus menyimpan gambar untuk diambil dan ditampilkan nanti dalam file xhtml?
Itu tergantung pada seberapa banyak kontrol yang Anda miliki untuk mengonfigurasi server. Idealnya adalah mengonfigurasi jalur tetap di luar folder webapps Tomcat. Misalnya, /var/webapp/upload
. Anda dapat menyetel jalur ini sebagai argumen VM atau variabel lingkungan sehingga aplikasi web Anda dapat mengambilnya secara terprogram tanpa perlu mengubah kode.
Misalnya, saat menetapkan sebagai argumen VM -Dupload.location=/var/webapp/upload
, Anda dapat menyelesaikan pengunggahan sebagai berikut:
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.
Untuk menyajikan file kembali, yang paling ideal adalah menambahkan lokasi unggahan sebagai <Context>
. yang terpisah ke Tomcat. Mis.
<Context docBase="/var/webapp/upload" path="/uploads" />
Dengan cara ini Anda dapat mengaksesnya secara langsung dengan http://example.com/uploads/foo-123456 .ext
Jika Anda tidak memiliki kendali untuk mengonfigurasi server, maka menyimpan di DB atau mengirim ke host pihak ketiga seperti Amazon S3 adalah pilihan terbaik Anda.
Lihat juga:
- Bagaimana cara menyediakan jalur relatif di kelas File untuk mengunggah file apa pun?
- Penyajian data yang andal