目标
将数据取在MSSQL,图像中,转换为base64并嵌入电子邮件。
Deets
我有一个图像,存储在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 json
或import simplejson
。在这里使用JSON解释器对我来说似乎是一个主要的kludge。
我还尝试将其用decompress
在SQL结尾转换为xml
,而这些都没有工作。这些图像作为电子邮件附件传递时正常工作,因此据我所知,它们不会损坏。要将它们嵌入HTML模板中,我需要将base64字符串列出。
我缺少一些东西,我不经常使用这些东西来弄清楚它。我知道签名/未签名,高水平的endian-,但我无法完全破解这个坚果。
将列值从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
希望这会有所帮助...