0

我正在处理文件上传,上传文件时将文件转换为 base64 字符串,并将此字符串发送到 API,该 API 将字符串保存在 SQL Server 数据库表中。

表中 base64 字符串列的类型是,NVARCHAR(MAX)但我注意到在保存文件时,SQL 会截断字符串,这样当您使用 base64 在线转换为图像解码器时,它只生成整个图片的一部分,我注意到 base64保存到 SQL 之前的字符串的字符数约为 72,000,但在保存 SQL 后,它减少到约 4,000,这是解码不完整图像的原因。

为什么 SQL 会截断 base64 字符串,我可以做些什么来帮助我解决这个问题?

这是我的base64转换代码:

public async Task<IActionResult> UploadFile()
{
    string base64string;
    var myFile = Request.Form.Files["claimFile"];
    var filetype = myFile.ContentType;
    var filepath = Path.GetTempFileName();
    using (var stream = System.IO.File.Create(filepath))
    {
        await myFile.CopyToAsync(stream);
    }
    byte[] imageByte = System.IO.File.ReadAllBytes(filepath);
    base64string = Convert.ToBase64String(imageByte);
    HttpContext.Session.SetString("Base64Str", base64string);
    return new EmptyResult();
}
4

2 回答 2

1

我怀疑问题可能在于,通过指定NVARCHAR(16 字节字符),您无意中“破坏”了字符串。

两个建议:

  1. 将列重新定义为VARCHAR(MAX)

  2. 保存一个 uuencoded 字符串,然后读回文本并查看保存/检索的字符串值是否匹配。

看这里:

https://dba.stackexchange.com/questions/212160/why-do-i-get-incorrect-characters-when-decoding-a-base64-string-to-nvarchar-in-s

请发回你找到的东西!

另外-出于好奇-您首先如何进行Base64编码?

于 2020-02-13T21:35:06.407 回答
0

我读取和写入 db 但 nText 列类型与以下就好了:如果需要,您可以从 vb.net 转换为 c#。

#Region "write/read files to db"

Public Function SaveToDB(ByVal fullfilename As String) As String
    Dim filedata = Convert.ToBase64String(File.ReadAllBytes(fullfilename))
    Return filedata
End Function

Public Function LoadFromDB(ByVal filedata As String, ByVal fullfilename As String) As String
    Dim filepath As String = (fullfilename)
    File.WriteAllBytes(filepath, Convert.FromBase64String(filedata))
    Return filepath
End Function

#结束区域

于 2021-03-30T21:47:50.513 回答