RT,遇到一个需求,base64图片码存数据库的,然后需要显示为图片,(浏览器可以展示base64图片码),这边非浏览器端。
总之接口那边需要的是图片,不是码。
废话不多说,直接上码:
建一个 Base64ImgRender.java
import com.jfinal.render.Render;
import com.jfinal.render.RenderException;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.Base64;
/**
* base64 图片码 转 图片流
*/
public class Base64ImgRender extends Render {
private String base64Img;
public Base64ImgRender(String base64Img) {
this.base64Img = base64Img;
}
public void render() {
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/png");
try {
Base64.Decoder decoder = Base64.getDecoder();
// 去掉base64前缀 data:image/jpeg;base64,
base64Img = base64Img.substring(base64Img.indexOf(",", 1) + 1);
byte[] b = decoder.decode(base64Img);
// 处理数据
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(b);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
throw new RenderException(e);
}
}
}
Controller 中使用:
String avatar = x.getStr("avatar");
render(new Base64ImgRender(avatar));搞定~
祝大家端午快乐~