Итак, в основном у меня А.И. приложение, которое выполняет обработку изображений. Сейчас я занимаюсь программированием веб-приложения, в котором пользователи будут загружать свои файлы изображений, после обработки им будет предоставлена информация.

Первая часть моего кода загружает файл изображения в каталог с именем «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");
}
0
Royal Aliyev 21 Дек 2019 в 04:32

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");
}
0
Elliott Frisch 21 Дек 2019 в 01:39