[英]Entity framework 4 and sql filestream to read a file from db
我在SQL 2008中使用ASP.NET 4,EF 4和FILESTREAM向数据库添加/读取文件。 我可以上载文件,但无法以我想要的方式检索文件。 这是我在做什么-
我可以将流写入临时文件(使用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.
谢谢你的帮助!
您可能要创建一个.ashx处理程序(假设您正在使用asp),并创建到该URL的Server.Transfer()或Server.Redirect()。
或者,您可以更改GridView以显示指向处理程序URL的超链接。
右键单击解决方案资源管理器>新建项目> ASP.Net Hanlder。
处理程序代码:
public class DownloadFile : IHttpHandler { // add IRequiresSessionState if needed
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context) {
var fileID = context.Request.QueryString["fileID"]; // assuming fileID is a string
var file = db.Storage.Single(f => f.ID.Equals(fileID));
// set the content type
context.Response.OutputStream.Write(file.Contents, 0, file.Contents.Length);
}
}
您可能还想添加一些错误检查。
您的URL可能是这样的: /DownloadFile.ashx?fileID=somefileid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.