как получить путь загрузки изображений в рамках Sparkjava?

В моем проекте я загружаю изображения с помощью метода метода загрузки. Каталог проекта:

Project
   |---src/main/java
   |---src/main/resources
                   |---static
                          |---css
                               |---default.css
   |---upload
         |---1.jpg
         |---2.jpg

Страница просмотра рендерится freemarker. В моем файле showimage.ftl тег img <img src="...">, как определить путь загруженного изображения в src.

Если поместить загружаемое изображение в src/main/resources, я могу использовать метод staticFileLocation для доступа, но я не могу загружать изображения в каталог ресурсов.


person L. YanJun    schedule 22.04.2016    source источник


Ответы (1)


Вам нужно получить поток файла и отправить необработанный ответ. Просто измените код, чтобы получить гибкий путь в зависимости от вашего объекта запроса.

try {
   String path = "upload/1.jpg";
   Path p = Paths.get(path);

   InputStream is = new FileInputStream(p.toFile());

   res.raw().setContentType(Files.probeContentType(p));
   res.raw().setHeader("Content-Disposition", "inline; filename=" + p.getFileName());

   byte[] buffer = new byte[1024];
   int len;
   while ((len = is.read(buffer)) > 0) {
      res.raw().getOutputStream().write(buffer, 0, len);
   }

   String result = IOUtils.toString(is);
   is.close();
   return result.trim();
} catch (Exception e) { // handle the exceptions the way you want
   logger.error("Error while getting resource", e);
   res.status(500);
   return "";
}
person Gonzague    schedule 20.06.2016
comment
Ваше решение не очень идеально. Вы не можете преобразовать свой поток в строку, хранящуюся в памяти, просто для отправки клиенту. Почему бы просто не передать его в поток вывода, чтобы избежать проблем с памятью? - person TheRealChx101; 11.02.2020