thay vì ghi nó vào ổ C của tôi, tôi sẽ chạy nó trên máy chủ, nhưng tôi nên lưu hình ảnh ở đâu để sau này truy xuất và hiển thị trong tệp xhtml?
Điều đó phụ thuộc vào mức độ kiểm soát của bạn đối với việc định cấu hình máy chủ. Lý tưởng nhất là định cấu hình một đường dẫn cố định bên ngoài thư mục ứng dụng web Tomcat. Ví dụ:/var/webapp/upload
. Bạn có thể đặt đường dẫn này làm đối số VM hoặc biến môi trường để ứng dụng web của bạn có thể truy xuất nó theo chương trình mà không cần thay đổi mã.
Ví dụ:khi chỉ định làm đối số VM -Dupload.location=/var/webapp/upload
, bạn có thể hoàn tất quá trình tải lên như sau:
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.
Đối với việc cung cấp tệp trở lại, lý tưởng nhất là thêm vị trí tải lên dưới dạng một <Context>
riêng biệt đến Tomcat. Ví dụ:
<Context docBase="/var/webapp/upload" path="/uploads" />
Bằng cách này, bạn có thể truy cập trực tiếp bằng cách http://example.com/uploads/foo-123456 .ext
Nếu bạn không có quyền kiểm soát đối với việc định cấu hình máy chủ, thì tốt nhất, bạn nên lưu trữ trong DB hoặc gửi đến máy chủ bên thứ ba, chẳng hạn như Amazon S3.
Xem thêm:
- Làm cách nào để cung cấp đường dẫn tương đối trong lớp Tệp để tải lên bất kỳ tệp nào?
- Cung cấp dữ liệu đáng tin cậy