不接受Spring MVC ResponseEntity <resource>一个ImputStreamResource?</resource>

时间:2011-11-08 10:41:24

标签: image spring spring-mvc response inputstream

我正在尝试使用ResponseEntity<Resource>作为控制器方法响应类型,使用Spring MVC发送jpg图像。

如果资源是FileSystemResource,它可以正常工作,但当我尝试使用InputStreamResource ResourceHttpMessageConverter询问内容长度时,InputStreamResource会抛出异常(来自AbstractResource方法,因为没有任何文件可以从中读取长度。如果方法返回ResourceHttpMessageConverter,则null会继续。

是否有其他方法可以将InputStream用作Resource作为ResponseEntity

2 个答案:

答案 0 :(得分:2)

例如,您可以将其复制到字节数组(或直接使用输入流 - 我没有使用输入流对其进行测试)。

@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);
}

提示:对于10MB以上的大内容,设置ContentLength非常重要。如果你错过了一些浏览器将无法正确下载它。 (没有ContentLength的确切文件大小是浏览器依赖的)

答案 1 :(得分:0)

尝试一下:

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