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

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。

【讨论】:

以上是关于将字节数组从服务器传输到浏览器的主要内容,如果未能解决你的问题,请参考以下文章

通过 BLE 向 MCU 发送字节数组

从服务端到客户端怎么传输Sql的dataset,怎么把字节数组转化为字符串,在线等

如何桥接字节数组和音频流?

Kafka传输文件(字节数组)

Kafka传输文件(字节数组)

将字节数组从java程序发送到c++