我的xhtml中有一个canvas元素。我通过String调用将其转换为base64编码的toDataUrl()称为dataUrl。这将产生以下输出,为清楚起见将其截断:



我想将此图像发送到我的MySQL数据库。我的实体中有一个Blob(@Lob)字段,为了将该字符串转换为字节数组,请使用dataUrl.getData()并使用此字节数组更新我的实体。

在我的MySQL数据库中,成功创建了BLOB。但是,当我右键单击它,然后单击“在编辑器中打开文件”时,我看到“字节”选项卡很好,但是当我单击“图像”选项卡时收到一般错误,表明字节以某种方式损坏了。

这意味着当我要使用BufferedImage imag = ImageIO.read(is);读取此文件时,其中isByteArrayInputStream(以bytes数组作为参数),imag返回null,更具体地说是read中的BufferedImage方法类。

编辑:查看屏幕截图,第一个是dataUrl.getBytes()调用,第二个是MySQL输出。

最佳答案

我使用String.getBytes()代替:

BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(dataURL.split("^data:image/(png|jpg);base64,")[1]);


而且效果很好。

关于java - 将转换后的Canvas DataURL字节保存到数据库时,Blob损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18421376/

10-09 19:51