问题描述
我正在尝试使用 ResponseEntity< Resource>
作为控制器方法响应类型,使用Spring MVC发送jpg图像。
I'm trying to send a jpg image with Spring MVC using ResponseEntity<Resource>
as the controller method response type.
如果资源是 FileSystemResource
它工作正常,但当我尝试使用 InputStreamResource
ResourceHttpMessageConverter
询问内容长度和 InputStreamResource
抛出异常(来自 AbstractResource
方法,因为没有任何文件可以读取长度)。如果方法返回 null
, ResourceHttpMessageConverter
将继续。
If the resource is a FileSystemResource
it works fine but when I try to use an InputStreamResource
the ResourceHttpMessageConverter
ask for the content lenght and InputStreamResource
throws an exception (from AbstractResource
method because there is not any file to read lenght from). ResourceHttpMessageConverter
would continue if the method returned null
instead.
是否有任何其他方法可以为 ResponseEntity InputStream
作为资源
/ code>?
Is there any other way to manage to use an InputStream
as Resource
for the ResponseEntity
?
推荐答案
例如,您可以将其复制到字节数组(或直接使用输入流 - - 我没有用输入流测试它。)
You can copy it to an byte array for example (or use the Input stream directly -- I have not tested it with an input stream).
@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的确切文件大小是浏览器所依赖的)
这篇关于不接受Spring MVC ResponseEntity< Resource>一个ImputStreamResource?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!