我的任务是将 Base64 编码的图像数据从 SQL Server 数据库提取到 C# (Blazor Server .NET 8) 应用程序中,并将图像嵌入到
<a>
元素的 html
中。
我已经反对将
base64
作为存储图像的方法,我们的数据基础设施人员表示它不会改变......
base64 字符串的 SQL Server 列类型是
VARCHAR(MAX)
。我遇到的问题与通过 .NET 后端中的 SELECT
执行 Microsoft.Data.SqlClient
查询时的编码有关。
我在查询数据库时得到的字符串直接将图像完美地呈现为
src
元素中的 img
属性,但我从 C# 中的查询执行中接收到的字符串却不是。我尝试通过base64.guru的解码工具(此类问题有多种可能性......
Base64 本身有许多不同的规则集/约定(围绕终止、分隔符和“字符 62 和 63”):Wikipedia
文本编码/解码和字节顺序标记 BOM:到 .Net Framework 3.5
string.Trim()
会将 BOM 识别为空格并将其删除,但从 Fx4 开始,您需要自己识别编码,通过与(类似于) string bomUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
和类似的 bomUtf16... Unicode.GetPreamble()
并明确修剪。
鉴于您的图像数据是使用 VARCHAR 存储的,您能否确定写入数据的系统的约定?如果没有,您可能需要编写一些搜索替换代码才能在所有情况下在 C# 中正常工作。