SpringBoot优雅的实现图片返回
2021-01-17 16:13
标签:configure 开发 tst 原因 put 简单 xtend over value 废话少说,直接干货: 前提:添加图片转换器 然后就可以直接写业务代码了,网上有很多一行代码搞定的,,本人亲测确实有效,代码如下:
注意: response.setContentType("image/png");这行代码一定要加上 至此....OK SpringBoot优雅的实现图片返回 标签:configure 开发 tst 原因 put 简单 xtend over value 原文地址:https://www.cnblogs.com/Baker-Street/p/12918295.html@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 增加图片转换器
* @param converters
*/
@Override
public void extendMessageConverters(List
@RestController
@Slf4j
@Api(tags = SwaggerConfig.TAG_IMAGE)
@RequestMapping(SwaggerConfig.TAG_IMAGE)
public class ImageController {
//通过produces 告知浏览器我要返回的媒体类型
@GetMapping(value = "/getImage2", produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_GIF_VALUE, MediaType.IMAGE_PNG_VALUE})
@ApiOperation("获取图片-返回BufferedImage")
public BufferedImage getImage2() throws IOException {
return ImageIO.read(new FileInputStream(new File("H:\\Pictures\\6f31c1a2gw6dcdoigmeftj.jpg")));
}
}
但是,坑来了..........按上面这种写法在没有任何错误情况下确实能正常返回图片,,,
但是在实际开发开发中,,springboot项目一般会做统一的异常处理( json格式结果集返回 )且一般会做security的安全认证,,当认证不通过时,,我们是希望得到统一的封装的返回信息(如:认证失败的提示),,
问题就出在这里了:这种写法在认证不通过时,,并不会返回认证失败的提示,,而是报错,,错误信息如下:
原因很简单:就是当认证失败时,,统一的异常处理是要返回一个json格式结果集,,但是该接口规定了返回的类型为MediaType的图片类型,,两者冲突了
最后,,经测试,,改写成如下写法(ImageIo流的形式写回图片)可保证认证失败时,返回认证失败信息,,认证成功后,,也能正常返回图片
@RestController
@Slf4j
@Api(tags = SwaggerConfig.TAG_IMAGE)
@RequestMapping(SwaggerConfig.TAG_IMAGE)
public class ImageController {
@Resource
private HttpServletResponse response;
@GetMapping(value = "/getImage")
@ApiOperation("获取图片-以ImageIO流形式写回")
public void getImage() throws IOException {
OutputStream os = null;
try {
// 读取图片
BufferedImage image = ImageIO.read(new FileInputStream(new File("F:\\谷歌下载\\未命名文件.png")));
response.setContentType("image/png");
os = response.getOutputStream();
if (image != null) {
ImageIO.write(image, "png", os);
}
} catch (IOException e) {
log.error("获取图片异常{}",e.getMessage());
} finally {
if (os != null) {
os.flush();
os.close();
}
}
}
}
文章标题:SpringBoot优雅的实现图片返回
文章链接:http://soscw.com/index.php/essay/43261.html