流程是这样,在oracle数据库中调用接口,接口中返回了一个xml的文档,文档某节点中的内容是一个图片的base64编码,业务是需要直接在oracle中将该图片存储到blob字段,并能够成功显示出图片。我已经解析了文档,并且能够成功插入到blob字段,但是却显示不出图片,主要原因是出在对base64反转这一块,我试着用utl_encode.base64_decode(aa)将base64反转然后再转换成成二进制,插入到blob,但是插入后,图片显示不出来。
流程应该就是先转回base64,然后再以二进制插入到数据库就可以了,但是图片显示不出,不知道是什么原因,请大家帮帮忙,深夜3点半,实在不容易啊,,各位大侠帮帮忙啊,,。。

解决方案 »

  1.   

    在java里面我可以把获得的字符串重新转化并保存到oracle的blob,正确显示图片。
    在oracle使用tl_encode.base64_decode应该是一样的吧
      

  2.   

    --转化
    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
      

  3.   

        最主要不是反转的问题,问题已经解决了,主要问题是,使用
    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对像就可以了。实现起来并不难,而且授权都不用。