流程是这样,在oracle数据库中调用接口,接口中返回了一个xml的文档,文档某节点中的内容是一个图片的base64编码,业务是需要直接在oracle中将该图片存储到blob字段,并能够成功显示出图片。我已经解析了文档,并且能够成功插入到blob字段,但是却显示不出图片,主要原因是出在对base64反转这一块,我试着用utl_encode.base64_decode(aa)将base64反转然后再转换成成二进制,插入到blob,但是插入后,图片显示不出来。
流程应该就是先转回base64,然后再以二进制插入到数据库就可以了,但是图片显示不出,不知道是什么原因,请大家帮帮忙,深夜3点半,实在不容易啊,,各位大侠帮帮忙啊,,。。
流程应该就是先转回base64,然后再以二进制插入到数据库就可以了,但是图片显示不出,不知道是什么原因,请大家帮帮忙,深夜3点半,实在不容易啊,,各位大侠帮帮忙啊,,。。
在oracle使用tl_encode.base64_decode应该是一样的吧
select utl_raw.cast_to_varchar2(utl_encode.BASE64_ENCODE(utl_raw.cast_to_raw('aa'))) from dual;---结果为 YWE=
--反解
select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('YWE='))) from dual; --结果为aa
dbms_lob.write(blob,number,number,utl_raw.cast_to_raw(utl_encode.base64_decode(utl_raw.cast_to_raw(varchar2))))
写的时候,utl_encode.base64_decode(utl_raw.cast_to_raw(varchar2)))将base64加密的字符串已经解析成16进制图片数据了,而utl_raw.cast_to_raw()又将这些16进制编码转换成了二进制(),插入blob的并不是图片的16进制编码,所以不能够显示出图片,但可以正常插入。
在oracle中调用java,能够很容易解决这个问题,在java中对图片字符串进行解码,再使用流写到blob对像就可以了。实现起来并不难,而且授权都不用。