【发布时间】:2020-02-13 21:29:20
【问题描述】:
我正在处理文件上传,上传时文件被转换为 base64 字符串,该字符串被发送到 API,该 API 将字符串保存在 SQL Server 数据库表中。
表中base64字符串列的类型是NVARCHAR(MAX),但我注意到保存文件时,SQL会截断字符串,这样当您使用base64在线转换为图像解码器时,它只会产生整个图片的一部分我注意到在保存到 SQL 之前的 base64 字符串的字符数约为 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();
}
【问题讨论】:
-
不是截断它,Base64 只是文本(ASCII 编码)。保存为
VARCHAR(MAX),Base64没有数字。 -
听起来像是您的数据库映射层正在截断或数据库本身正在截断值。 4000 是 nvarchar 受限制时的最大限制(不是最大值),因此您的数据库值具有 4000 个字符这一事实并非巧合。不过,没有理由使用 nvarchar,而是使用 varchar。
-
如何将结果写入数据库?
-
不相关 - 为什么先写入文件,然后写入会话变量?还有为什么要写入会话变量?
-
如何从 SQL 中获取 base64?通过 SSMS? SSMS 可能只显示前 8000 个字符,即使完整值在数据库中。请参阅:stackoverflow.com/questions/11897950/…(例如)。尝试将数据写入文件并从那里打开。
标签: c# sql sql-server sql-server-2014 tobase64string