项目场景:
Oracle clob字段存储base64位图,转为文件流
问题描述:
base64字符串转为输入流时,但是InputStream不是空的,用(InputStream)读取输入流时返回了null,也就是下面BufferedImage为空的问题。
String baseStr = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
sun.misc.BASEDecoder decoder = new sun.misc.BASEDecoder();
byte[] baseBytes = decoder.decodeBuffer(baseStr);
ByteArrayInputStream bais = new ByteArrayInputStream(baseBytes);
BufferedImage bufferedImage = javax.imageio.ImageIO.read(bais);
原因分析:
这里是由于base64图片字符串前面有data:image/gif;base64,的问题,导致虽然输入流不为空但是返回为null的问题解决方案:
对base64字符串替换前面头部描述信息,即可解决。
(“data:image/.+?;base64,”,"");
完成代码如下:
String baseStr = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
sun.misc.BASEDecoder decoder = new sun.misc.BASEDecoder();
baseStr = baseStr.replaceAll("data:image/.+?;base64,","");
byte[] baseBytes = decoder.decodeBuffer(baseStr);
ByteArrayInputStream bais = new ByteArrayInputStream(baseBytes);
BufferedImage bufferedImage = javax.imageio.ImageIO.read(bais);