Итак, в основном у меня А.И. приложение, которое выполняет обработку изображений. Сейчас я занимаюсь программированием веб-приложения, в котором пользователи будут загружать свои файлы изображений, после обработки им будет предоставлена информация.
Первая часть моего кода загружает файл изображения в каталог с именем «images». Вторая часть связана с чтением изображения из того же каталога. Но когда я исследовал это, иногда можно найти плохую практику. Может ли кто-нибудь объяснить мне, почему это считается плохой практикой и каким образом я могу заменить его?
List<FileItem> fileItemList = servletFileUpload.parseRequest();
String path = getServletContext().getRealPath("");
for(FileItem fileItem: fileItemList){
fileItem.write(new File(path + "images/" + fileItem.getName()));
}
BufferedImage bufferedImage = ImageIO.read(new File(path + "images/" + fileItem.getName()));
И мой второй вопрос: где хранятся все записанные файлы (по fileItem.write()
)? Потому что невозможно загрузить 2-е изображение с тем же именем. Когда я проверяю, существует ли файл со следующим фрагментом кода, он возвращает false, но все равно невозможно загрузить.
String path = getServletContext().getRealPath("images/myImageFileName.png");
File file = new File(path);
if (file.exists()) {
System.out.println("exist");
} else {
System.out.println("does not exist");
}
1 ответ
Ваш второй вопрос фактически (частично) отвечает на первый; вы явно не контролируете, где вы читаете и пишете, поэтому вы не знаете, где вы читаете и пишете. Есть два довольно простых способа решить эту проблему.
Вариант 1: чтение и запись относительно папки HOME.
String path = System.getProperty("user.home");
Вариант 2: чтение и запись относительно некоторой предустановленной переменной среды, возможно, возврат к варианту 1.
String path = System.getenv("IMAGE_FOLDER");
if (path == null) {
path = System.getProperty("user.home");
}
Новые вопросы
java
Java - это популярный язык программирования высокого уровня. Используйте этот тег, если у вас есть проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [gradle] и [maven].