后端提供服务,通常返回的json串,但是某些场景下可能需要直接返回二进制流,如一个图片编辑接口,希望直接将图片流返回给前端,此时可以怎么处理?
I. 返回二进制图片
主要借助的是 HttpServletResponse这个对象,实现case如下
@RequestMapping(value = {"/img/render"}, method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.OPTIONS})
@CrossOrigin(origins = "*")
@ResponseBody
public String execute(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// img为图片的二进制流
byte[] img = xxx;
httpServletResponse.setContentType("image/png");
OutputStream os = httpServletResponse.getOutputStream();
os.write(img);
os.flush();
os.close();
return "success";
}
注意事项
注意ContentType定义了图片类型
将二进制写入 httpServletResponse#getOutputStream
写完之后,flush(), close()请务必执行一次
II. 返回图片的几种方式封装
一般来说,一个后端提供的服务接口,往往是返回json数据的居多,前面提到了直接返回图片的场景,那么常见的返回图片有哪些方式呢?
返回图片的http地址
返回base64格式的图片
直接返回二进制的图片
其他...(我就见过上面三种,别的还真不知道)
那么我们提供的一个Controller,应该如何同时支持上面这三种使用姿势呢?
1. bean定义
因为有几种不同的返回方式,至于该选择哪一个,当然是由前端来指定了,所以,可以定义一个请求参数的bean对象
@Data
public class BaseRequest {
private static final long serialVersionUID = 1146303518