base64 字符串转文件流问题

时间:2025-03-19 09:00:23

项目场景:

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);