【发布时间】:2010-09-15 20:37:30
【问题描述】:
我在 SQL 2008 中使用 ASP.NET 4、EF 4 和 FILESTREAM 向数据库添加/读取文件。我可以很好地上传文件,但我无法以我想要的方式检索文件。这就是我正在做的事情-
- 我有一个显示文件列表的网格。每个行项目都是一个带有 CommandName 和 CommandArgument 集的文件。
- 用户单击这些文件中的任何一个,我在 RowCommand 事件中捕获该事件。此时,我得到文件的 ID 并从数据库中检索 byte[]。如何为用户显示标准下载框以保存或取消下载?
我可以将流写入临时文件(使用 System.IO.File.WriteAllBytes),然后对临时文件执行 Server.Transfer,但我认为这是不必要的步骤。有没有办法,我可以直接将字节读取到内存中,然后设置 ContentType/MimeType 并允许用户保存文件?
我了解使用 T-SQL 访问 FILESTREAM 文件比使用 WIN32 API(使用新的 SystemFile.PathName() 和 Impersonation 的组合)访问相同的文件要慢,但 EF4 使使用 SQL 更快,所以我要去那条路线。
这是代码 -
var file = db.Storage.Single(f => f.ID.Equals(fileID)); // fileID is set in CommandArgument
// file.Contents has the byte [].
// display a standard file download box.
感谢您的帮助!
【问题讨论】:
标签: sql entity-framework-4 filestream