我有一个包含文件内容的数据库列。我将它转换为服务器上的byte [](我不想将文件保存到磁盘),然后将其发送到客户端进行下载。该文件可以是任何东西(pdfs,pics,word,excel等)。
我有文件名,所以我知道扩展名,但我不确定如何将它发送到客户端的最佳方式。这是我目前所在的地方:
string fileName = ds.Tables[0].Rows[0]["form_file_name"].ToString();
byte[] fileContents = (byte[])ds.Tables[0].Rows[0]["form_file_contents"];
我从哪里开始?
答案 0 :(得分:6)
你应该可以通过类似的东西把它写给客户......
Response.Clear();
Response.AddHeader("Content-Length", fileContents.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=FILENAME");
Response.OutputStream.Write(fileContents, 0, fileContents.Length);
Response.Flush();
Response.End();
答案 1 :(得分:0)
我的情况类似;如果你正在处理文件,你应该考虑如果你在数据库中有一个大文件会发生什么。
您可以在Memory effective way to read BLOB data in C#/SQL 2005中使用DataReader.GetBytes()
并以块的形式写入该数据。这是一种更好的方法,因为您不需要在内存中包含整个文件,但每次只需要一小部分文件。
使用这个想法,您可以编写代码来读取64k数据块并将其写为Quintin Robinson said。