SpringMVC返回图片的几种方式(小结)

  

后端提供服务,通常返回的json串,但是某些场景下可能需要直接返回二进制流,如一个图片编辑接口,希望直接将图片流返回给前端,此时可以怎么处理?

  

<强>我。返回二进制图片

  

主要借助的是HttpServletResponse这个对象,实现情况如下

        @RequestMapping(值=https://www.yisu.com/zixun/{/img/渲染”}={RequestMethod方法。,RequestMethod。帖子,RequestMethod.OPTIONS})   @CrossOrigin(起源=?”)   @ResponseBody   公共字符串执行(HttpServletRequest HttpServletRequest   HttpServletResponse HttpServletResponse) {//img为图片的二进制流   byte [] img=xxx;   httpServletResponse.setContentType(“图像/png”);   OutputStream os=httpServletResponse.getOutputStream ();   os.write (img);   os.flush ();   os.close ();   返回“成功”;   }   之前      

注意事项

  
      <李>注意ContentType定义了图片类型李   <李>将二进制写入httpServletResponse # getOutputStream李   <李>写完之后,冲洗(),()请务必执行一次李   
  

二世。返回图片的几种方式封装

  

一般来说,一个后端提供的服务接口,往往是返回json数据的居多,前面提到了直接返回图片的场景,那么常见的返回图片有哪些方式呢?

  
      <李>返回图片的http地址李   <李>返回base64格式的图片   <李>直接返回二进制的图片   <李>其他…(我就见过上面三种,别的还真不知道)   
  

那么我们提供的一个控制器,应该如何同时支持上面这三种使用姿势呢?

  

<强> 1。豆定义

  

因为有几种不同的返回方式,至于该选择哪一个,当然是由前端来指定了,所以,可以定义一个请求参数的bean对象

        @ data   公开课BaseRequest {   私有静态最终长serialVersionUID=1146303518394712013 l;/* *   *输出图片方式:   *   * url: http地址(默认方式)   * base64: base64编码   *流:直接返回图片   *   */私人字符串outType;/* *   *返回图片的类型   * jpg | png | webp | gif   */私人字符串mediaType;   公共ReturnTypeEnum returnType () {   返回ReturnTypeEnum.getEnum (outType);   }   公共MediaTypeEnum mediaType () {   返回MediaTypeEnum.getEnum (mediaType);   }   }   之前      

为了简化判断,定义了两个注解,一个ReturnTypeEnum,一个MediaTypeEnum,当然必要性不是特别大,下面是两者的定义

        公共enum ReturnTypeEnum {   网址(URL),   流(“流”),   BASE64(“基地”);      私人字符串类型;   ReturnTypeEnum (String类型){   这一点。类型=类型;   }   私有静态Map<字符串,ReturnTypeEnum>地图;   静态{   地图=new HashMap<比;(3);   (ReturnTypeEnum e: ReturnTypeEnum.values ()) {   map.put (e。类型,e);   }   }      公共静态ReturnTypeEnum getEnum (String类型){   如果(type==null) {   返回的URL;   }      ReturnTypeEnum e=map.get (type.toLowerCase ());   返回e==null & # 63;URL: e;   }   }      之前            @ data   公共enum MediaTypeEnum {   ImageJpg (“jpg”、“图像/jpeg”、“FFD8FF”),   ImageGif (“gif”、“图像/gif”、“47494638”),   ImagePng (“png”、“图像/png”、“89504 e47”),   ImageWebp (“webp”、“图像/webp”、“52494646”),   私人ext最终字符串;   私人mime最终字符串;   私人最终字符串魔法;   mime ext MediaTypeEnum(字符串,字符串,字符串魔法){   这一点。ext=ext;   这一点。mime=mime;   这一点。魔法=魔法;   }      私有静态Map<字符串,MediaTypeEnum>地图;   静态{   地图=new HashMap<比;(4);   (MediaTypeEnum e:值()){   map.put (e.getExt (), e);   }   }      公共静态MediaTypeEnum getEnum (String类型){   如果(type==null) {   返回ImageJpg;   }   MediaTypeEnum e=map.get (type.toLowerCase ());   返回e==null & # 63;ImageJpg: e;   }   }      之前      

上面是请求参数封装的bean,返回当然也有一个对应的bean

        @ data   公开课BaseResponse {/* *   *返回图片的相对路径   */私人字符串路径;/* *   *返回图片的https格式   */私人字符串url;/* *   * base64格式的图片   */私人字符串基地;   }      

SpringMVC返回图片的几种方式(小结)