3

目标

获取 mssql 中的数据,一个图像,转换为 base64 并嵌入到电子邮件中。

迪茨

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

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 jsonor import simplejson。在这里使用 json 解释器对我来说似乎是一个主要的问题。

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

我错过了一些东西,我不经常使用这些东西来弄清楚它。我知道高级别的有符号/无符号字节序,但我不能完全破解这个坚果。

4

1 回答 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

选项 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

希望这可以帮助...

于 2019-08-22T19:40:53.823 回答