【问题标题】:How to store and retrieve documents as blobs in database?如何在数据库中将文档作为 blob 存储和检索?
【发布时间】:2012-06-10 06:30:19
【问题描述】:

在我的基于 MVC 3 / SQL Server 的应用程序中,我想将 pdf 文档作为 blob 存储在数据库中。在我的模型中,我有这个属性:

public byte[] PdfData { get; set; }

读取文件并从文件流中获取字节相当简单,但是在尝试保存更改时出现错误

字节数组截断到长度为 4000

这当然是有道理的,因为文档大于默认的 4000 字节限制。但是我不允许将 maxlength 属性设置为超过 8000,这太小了。我知道我可以通过使用这样的图像数据类型来解决这个问题:

[Column(TypeName = "image")]
public byte[] PdfData { get; set; }

但据我了解,图像数据类型只是为了向后兼容,并且可能随时消失。我想要做的是使用varbinary(max) 数据类型。但是如何设置我的模型以在 SQL Server 中生成此数据类型的列?

附带说明一下,我目前在我的开发环境中运行 SQL Server CE,但该应用程序在部署时将针对常规 SQL Server 2008 数据库。不确定这是否相关。

【问题讨论】:

  • 是的,我确实尝试过 [Column(TypeName = "varbinary(max)"] 只是为了得到错误:类型 varbinary(max) 不符合命名空间或别名。只有 PrimitiveTypes 可以无条件使用

标签: sql-server asp.net-mvc-3 model-view-controller blob


【解决方案1】:

请参阅Download and Upload images from SQL Server via ASP.Net MVC,您可以简单地使用它来存储 PDF 而不是图像。还有FILESTREAM MVC: Download and Upload images from SQL Server 用于基于文件流的实现。它的要点是,您不仅要存储和检索大 blob,而且还要绝对避免与byte[] 之间的转换,因为这意味着必须首先将整个文档复制到 ASP 进程的实时内存中,它会杀死服务器在中等负载下。上面的例子展示了如何使用流接口进行上传和下载。

【讨论】:

  • 谢谢,Remus,这对我来说可能有点矫枉过正,但以后可能会有用。
猜你喜欢
  • 2010-09-17
  • 2016-04-22
  • 2012-11-06
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2021-11-23
相关资源
最近更新 更多