Не принимает Spring MVC ResponseEntity <Resource>ImputStreamResource? - PullRequest
1 голос
/ 08 ноября 2011

Я пытаюсь отправить изображение jpg с Spring MVC, используя ResponseEntity<Resource> в качестве типа ответа метода контроллера.

Если ресурс FileSystemResource, он работает нормально, но когда я пытаюсь использоватьInputStreamResource ResourceHttpMessageConverter запрашивает длину содержимого, а InputStreamResource выдает исключение (из метода AbstractResource, потому что нет файла для чтения длины).ResourceHttpMessageConverter продолжится, если метод вернет null.

Есть ли другой способ использовать InputStream в качестве Resource для ResponseEntity?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

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

@RequestMapping(value = "/{bid}/image", method = RequestMethod.GET)
public HttpEntity<byte[]> content(@PathVariable("bid") final MyImage image) {

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(...);
    headers.setContentLength(image.getSize());

    return new HttpEntity<byte[]>(this.image.getContentAsByteArray(), headers);
}

Подсказка: для большого контента размером 10 МБ + важно установить ContentLength. Если вы пропустите это, некоторые браузеры не загрузят его правильно. (Точный размер файла, до которого он работает без ContentLength, зависит от браузера)

0 голосов
/ 18 июля 2018

Попробуйте это:

return ResponseEntity.ok()
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=filename.jpg")
            .contentLength(length)
            .contentType(MediaType.APPLICATION_OCTET_STREAM_VALUE)
            .body(new InputStreamResource(inputStream));
...