将 MSSQL 的 varbinary 转换为 base64 字符串

3

目标

从 MSSQL 数据库中获取数据和图片,将其转换为 Base64 编码并嵌入到邮件中。

细节

我有一张图片,存储在 MSSQL 数据库的 varbinary 列中。

0xFFD8FFE00....

另一方面,我正在将其查询到一个古老的Jython环境中,因为那是我能访问的唯一选择。

当我查询并打印时,似乎会得到一个有符号字节或字符数组(也许?)。

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

另一个线程建议将其转换为b64编码器

import base64
encoded = base64.b64encode(queryResult)

这给了我一个错误:TypeError:b2a_base64():第一个参数不能强制转换为字符串

该线程还提到将其转换为json,但由于我处于Python 2.4领域,因此我没有访问import jsonimport simplejson。在这里使用json解释器似乎对我来说是主要的hack。

我还尝试使用decompress和转换为xml在SQL端进行转换,但两者都根本无法工作。通过电子邮件附件传递时,图像可以正常工作,因此据我所知,它们并未损坏。要将它们嵌入html模板中,我需要取出那个Base64字符串。

我错过了什么,我不经常使用这些东西无法找出解决方法。我了解高级别的有符号/无符号,字节序等,但我无法完全解决这个难题。


有关 T-SQL,请参见 https://dev59.com/YlcO5IYBdhLWcg3whiBx。 - Dan Guzman
@Dan Guzman,我已经尝试了许多方法,但还没有成功。仍在研究一些示例。TechNet文章提到的易于理解的示例非常糟糕。 - Bmo
这个简单的例子对我有效:SELECT CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("YourBinaryColumn")))', 'VARCHAR(MAX)') Base64EncodingData FROM dbo.YourTable; - Dan Guzman
1个回答

0
将列值从VARBINARY转换为Base64
在大多数情况下,我们需要处理表中的多行,并且只想将VARBINARY数据转换为BASE64字符串。基本解决方案与上面相同,除了使用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

选项二:使用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

希望这能有所帮助...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接