我想写一个spring控制器方法,从存储器返回一个图像。下面是我目前的版本,但它有两个问题:
@getmapping注解需要“products”参数,该参数是媒体类型的字符串数组。如果该参数不存在,则程序不工作;它只是将图像数据显示为文本。问题是,如果我想支持一个额外的媒体类型,那么我必须重新编译程序。有没有办法从viewimg方法内部设置“products”媒体类型?
下面的代码将显示除svg以外的任何图像类型,svg将仅显示消息“由于包含错误,无法显示图像”。web浏览器(firefox)将其标识为媒体类型“webp”。但是,如果我从“products”字符串数组中删除除“image/svg+xml”项之外的所有媒体类型,则会显示图像。
请建议如何编写一个更通用的控制器方法(以便它可以与任何媒体类型一起工作),并且不存在svg媒体类型的问题。
这是我的测试代码:
@GetMapping(value = "/pic/{id}",
produces = {
"image/bmp",
"image/gif",
"image/jpeg",
"image/png",
"image/svg+xml",
"image/tiff",
"image/webp"
}
)
public @ResponseBody
byte[] viewImg(@PathVariable Long id) {
byte[] data = new byte[0];
String inputFile = "/path/to/image.svg";
try {
InputStream inputStream = new FileInputStream(inputFile);
long fileSize = new File(inputFile).length();
data = new byte[(int) fileSize];
inputStream.read(data);
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
1条答案
按热度按时间gev0vcfq1#
我推荐
FileSystemResource
用于处理文件内容。你可以避免.contentType(..)
如果您不想发送Content-Type
价值观。