很多javaweb开发人员可能都会遇到当图片以Base64的字符串存在数据库中,怎么展示到页面上呢?我所熟知的有两种方法:
1.直接使用Data URI scheme,即将后台存的base64字符串直接传到页面,页面的img等使用时指定src='https://img-blog.csdnimg.cn/2022010710013359713.png',如<img src=“data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ2Acs6406KUgpt5/LCKuVgz5BDCSb13ZO99ZOdcZGvt4mJjzMVKqcha68iIePB86GAiOv8CDADlIUQBs7MD3wAAAABJRU5ErkJggg%3D%3D”/>;
import org.apache.commons.codec.binary.Base64;
从数据库查出来
List list = q.list();
if(!list.isEmpty()){
for (Object object : list) {
if(null!=object){
lo.add(Base64.encodeBase64String(decoder.decodeBuffer(new String((byte[]) object))));
}
}
}
result.put("img", lo);
<img src="https://img-blog.csdnimg.cn/2022010710013388148.jpg' +img' + ' "/>
2.后解码,将base64字符串解码成二进制的图片直接以流的方式返回给页面。如:BASE64Decoder decoder = new BASE64Decoder();
HttpServletResponse response = ServletActionContext.getResponse();
try {
String imgStr = base64Str;
byte[] b = decoder.decodeBuffer(imgStr);
response.setContentType("image/jpg"); // 设置返回的文件类型
OutputStream os = response.getOutputStream();
os.write( b);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
也面需要使用图片的指定src为后台接受请求的接口地址,如:
var url = "<%=request.getContextPath()%>/app/attachments.do?id="+id;
<img src="' + url + '" />
其中,第一种方式在IE8及以下版本的浏览器中支持存在着问题。如果考虑方便而且不用考虑浏览器兼容问题的话,建议使用第一种。如果考虑到多浏览器兼容性问题,建议使用第二种。