以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 json
或import simplejson
。在我看来,在这里使用json解释器似乎是一个大麻烦。
我还尝试过在SQL端使用decompress
进行转换并将其转换为xml
,但这些都不起作用。这些图像作为电子邮件附件传递时可以正常工作,因此,据我所知,它们没有损坏。要将它们嵌入html模板中,我需要取出Base64字符串。
我丢失了一些东西,我经常用这些东西来解决它。我知道高级别的带符号/无符号,字节序,但是我对此不太满意。
答案 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
希望这对您有帮助...