2

我有一个包含文件内容的数据库列。我将其转换为服务器上的 byte[](我不想将文件保存到磁盘),然后想将其发送给客户端进行下载。该文件可以是任何东西(pdf、图片、word、excel 等)。

我有文件名,所以我知道扩展名,但我不确定将其发送给客户端的最佳方式是什么。这是我目前所在的位置:

string fileName = ds.Tables[0].Rows[0]["form_file_name"].ToString();
byte[] fileContents = (byte[])ds.Tables[0].Rows[0]["form_file_contents"];

我从这里去哪里?

4

2 回答 2

7

您应该可以通过类似这样的方式将其写给客户端...

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();
于 2009-10-16T17:02:47.990 回答
0

我在这里也有类似的情况;如果您正在处理文件,您应该考虑如果数据库中有一个大文件会发生什么。

您可以使用DataReader.GetBytes()as in Memory 有效的方式来读取 C#/SQL 2005 中的 BLOB 数据并以块的形式写入该数据。这是一种更好的方法,因为您不需要将整个文件放在内存中,而每次只需要一小块。

使用这个想法,您可以编写代码来读取 64k 数据块并像Quintin Robinson 所说的那样编写它们。

于 2009-10-16T17:48:13.233 回答