将字节数组从服务器传输到浏览器
Posted
技术标签:
【中文标题】将字节数组从服务器传输到浏览器【英文标题】:Transfer Byte array from server to browser 【发布时间】:2009-10-16 16:58:03 【问题描述】:我有一个包含文件内容的数据库列。我将其转换为服务器上的 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"];
我从这里去哪里?
【问题讨论】:
将文件的内容保存为数据库中的字节数组仍将其保存到磁盘:) 它保存到数据库上的磁盘,而不是网站运行的磁盘 【参考方案1】:您应该可以通过类似这样的方式将其写给客户端...
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();
【讨论】:
或 Response.BinaryWrite(fileContents) 而不是写入 OutputStream。 对 BinaryWrite 的良好调用。【参考方案2】:我也有类似的情况;如果您正在处理文件,您应该考虑如果数据库中有一个大文件会发生什么。
您可以像在Memory effective way to read BLOB data in C#/SQL 2005 中一样使用DataReader.GetBytes()
,并将该数据分块写入。这是一种更好的方法,因为您不需要在内存中保存整个文件,而每次只需一小部分。
使用这个想法,您可以编写代码来读取 64k 数据块并将它们写成Quintin Robinson said。
【讨论】:
以上是关于将字节数组从服务器传输到浏览器的主要内容,如果未能解决你的问题,请参考以下文章