将MSSQL varbinary转换为base64字符串

时间:2019-05-09 14:17:01

标签: python sql-server encoding jython-2.5

目标

以mssql(图像)的形式获取数据,转换为base64并嵌入电子邮件中。

定义

我有一个图像,存储在mssql数据库的varbinary列中。

0xFFD8FFE00....

另一方面,我正在将其查询到古老的Jython环境中,因为这就是我可以访问的全部内容。

查询和打印时,我似乎得到了一个带符号的字节数组或一个字符(也许是?)。

>>> array('b', [-1, -40, -1, -32, 0, 16,...

另一个线程建议将其转储到b64编码器中

import base64
encoded = base64.b64encode(queryResult)

哪个给我一个错误TypeError: b2a_base64(): 1st arg can't be coerced to String

该线程还提到将其转换为json,但是由于我在Python 2.4中,所以我无权访问import jsonimport simplejson。在我看来,在这里使用json解释器似乎是一个大麻烦。

我还尝试过在SQL端使用decompress进行转换并将其转换为xml,但这些都不起作用。这些图像作为电子邮件附件传递时可以正常工作,因此,据我所知,它们没有损坏。要将它们嵌入html模板中,我需要取出Base64字符串。

我丢失了一些东西,我经常用这些东西来解决它。我知道高级别的带符号/无符号,字节序,但是我对此不太满意。

1 个答案:

答案 0 :(得分:0)

  

将列值从VARBINARY转换为Base64

在大多数情况下,我们将需要处理表中的多行,并且我们只想将VARBINARY数据转换为BASE64 String。基本解决方案与上述相同,除了使用XML XQuery的解决方案外,我们只需要使用其他方法即可。

选项1: 使用JSON将二进制文件转换为Base64

    select Id,AvatarBinary
    from openjson(
        (
            select Id,AvatarBinary
            from AriTestTbl
            for json auto
        )
    ) with(Id int, AvatarBinary varchar(max))
    GO

选项2: 使用XML XQuery将二进制文件转换为Base64

    select Id,
        cast('' as xml).value(
            'xs:base64Binary(sql:column("AriTestTbl.AvatarBinary"))', 'varchar(max)'
        )
    from AriTestTbl
    GO

选项3: 使用XML和提示“ for xml path”将二进制文件转换为Base64

    select Id,AvatarBinary,s
    from AriTestTbl
    cross apply (select AvatarBinary as '*' for xml path('')) T (s)
    GO

希望这对您有帮助...