我已使用以下代码将图像转换为字节数组,以将其存储在数据库
中 if (Request.Content.IsMimeMultipartContent())
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.Contents)
{
var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
var attachmentData = new AttachmentData ();
attachmentData.File = file.ReadAsByteArrayAsync().Result;
db.AttachmentData.Add(attachmentData);
db.SaveChanges();
return Ok(attachmentData);
}
}
此处DB中的File列的类型为“varbinary(max)”,而在EF模型中,它是字节数组(byte [])。
使用上面的代码我能够将文件保存在类似于“0x30783839353034453437304430413143136303832 .....”的文件列中(这个长度超过了43679个字符,超过了任何列的默认值,因此数据被截断了存储它)
我必须更改列的默认长度(43679)以将其存储在数据库中。
我是否正确地在数据库中检索和存储图像。我还想将图像存储为“Base64 String”,但43679仍将超过。
我正在使用Angular JS在前端显示图像,该图像使用WebAPI在数据库中获取并将图像保存为ByteArray。
答案 0 :(得分:0)
是的,不知道数据库如何运作真的很有帮助。
首先:
VARBINARY(最大)
最多可存储2GB,而不是43679字节。
然后:
类似于" 0x30783839353034453437304430413143136303832 .....
这不是它的存储方式。这是uotput中的文本表示。
(此长度超过43679个字符,超出默认值 任何列,以便在存储数据时截断数据)
任何列都没有默认值 - 基本上是SQL Server Management Studio,它可能无法将图像作为图像处理,并且有很多限制。但这不是数据库,而是管理员。
我还想将图像存储为" Base64 String"但43679仍然会 超过
实际上不会,它会超过这个 - 你的数据会显着更长,因为Base64比二进制数据更长。