Как заставить изображения появляться сразу

Я загружаю файлы с помощью этого метода:

@Override
public void store(MultipartFile file, AnimalEntity animalEntity) {
    String filename = animalEntity.getNameString() + animalEntity.getAge() + ".jpg";
    try (InputStream inputStream = file.getInputStream()) {
            Files.copy(inputStream, this.rootLocation.resolve(filename), StandardCopyOption.REPLACE_EXISTING);
        }
    } catch (IOException e) {
        throw new StorageException("Failed to store file " + filename, e);
    }

И показ изображения с:

<img alt = "" src = "" th:alt = "${dog.id}" th:src = "@{${dog.getNameString()} + ${dog.getAge()} + '.jpg'}"> 

Изображения видны только после перезапуска приложения. Я не знаю, почему и как решить эту проблему.

Кстати Как я могу указывать файлы вместо использования всего пути:

private String location = "C:\\Users\\XXX\\Documents\\Projekty\\IntelliJ\\shelter\\src\\main\\resources\\static\\photos";

?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
42
1

Ответы 1

Приложение, отображающее изображение, загружает его до того, как вы замените его, поэтому вам придется обнаруживать изменения. Вы можете сделать это с помощью WatchService, на который уже ответили здесь: Java, как обнаружить изменения файла

Я попробую это. А ссылка на папку? Я не хочу использовать путь "C:\\Users\\XXX\\Documents\\Projekty\\IntelliJ\\shelter\\src‌​\\main\\resources\\s‌​tatic\\photos"; потому что на другом компе может не работать

YourDoom 04.02.2019 10:06

Вы можете создать папку в пользовательском каталоге, которая будет использоваться обоими приложениями. Чтобы получить путь пользователя, используйте System.getProperty("user.home").

Master Fry 04.02.2019 19:26

Хорошо, я прочитал о WatchService и не знаю, где его использовать. Я сохраняю файл, используя метод, упомянутый выше, а затем просто загружаю его с помощью HTML-тега <img>. Я не знаю, какой фрагмент кода должен быть обработан после обнаружения изменения каталога.

YourDoom 05.02.2019 12:18

После того, как вы обнаружите изменение в каталоге, вы просто перезагрузите изображение из файла. Тогда у вас будет обновленное изображение в вашей программе. Кроме того, если у вас может быть много файлов в этом каталоге, может быть целесообразно проверить, действительно ли файл был изменен, прежде чем перезагружать его. docs.oracle.com/javase/9/docs/api/java/io/…

Master Fry 05.02.2019 19:26

Другие вопросы по теме