将Byte数组从服务器传输到浏览器

时间:2009-10-16 16:58:04

标签: c# asp.net arrays byte transfer

我有一个包含文件内容的数据库列。我将它转换为服务器上的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"];

我从哪里开始?

2 个答案:

答案 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