2016-01-11 2 views
0

Мой HTML-файл имеет следующую командуПопытка получить изображение с весны

<img src="/5/background" alt="" width="192" height="192"> 

Что я обязан следующее внутри @RestController в приложении Spring загрузки:

@RequestMapping(value = "/{connector}/background", method = RequestMethod.GET) 
public File getConnectorBackgroundImage(@PathVariable("connector") int connector) 
{ 
    File image = new File("folder" + connector + "/myPicture"); 
    return image; 
} 

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

Что еще мне не хватает?

+2

Вам нужно вернуть массив байтов обратно клиенту. В противном случае он не имеет возможности интерпретировать объект File, отправленный из java (spring). –

+0

Отлично работает! – MaxPower

ответ

1

Весна не знает, как обрабатывать файл таким образом. Если вы вернете File, контроллер просто покажет вам путь к файлу, если вы вызовете REST API.

Правильный способ сделать это - прочитать файл как byte[]. Используя Викисклада Io вы могли бы придумать что-то вроде этого:

File image = new File("folder" + connector + "/myPicture"); 
FileInputStream input = null; 
try { 
    input = new FileInputStream(image); 
    return IOUtils.toByteArray(input); 
} finally { 
    IOUtils.closeQuietly(input); 
} 

Еще одна вещь, которую вы не должны забывать о том, чтобы обеспечить MimeType. Для этого вам настроить @RequestMapping аннотацию немного, обеспечивая produces свойство:

@RequestMapping(value = "/{connector}/background", method = RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE) 

Это должно сделать трюк.

EDIT: не заметил комментариев, вы уже исправили его самостоятельно.