通过实体框架

时间:2016-05-12 08:21:06

标签: c# angularjs database asp.net-web-api ionic-framework

我已使用以下代码将图像转换为字节数组,以将其存储在数据库

        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。

1 个答案:

答案 0 :(得分:0)

是的,不知道数据库如何运作真的很有帮助。

首先:

  

VARBINARY(最大)

最多可存储2GB,而不是43679字节。

然后:

  

类似于" 0x30783839353034453437304430413143136303832 .....

这不是它的存储方式。这是uotput中的文本表示。

  

(此长度超过43679个字符,超出默认值   任何列,以便在存储数据时截断数据)

任何列都没有默认值 - 基本上是SQL Server Management Studio,它可能无法将图像作为图像处理,并且有很多限制。但这不是数据库,而是管理员。

  

我还想将图像存储为" Base64 String"但43679仍然会   超过

实际上不会,它会超过这个 - 你的数据会显着更长,因为Base64比二进制数据更长。