我有一个大型 XML 文件,我从 SQL 数据库生成并使用 System.Xml.XmlWriter 对象流式传输到客户端的 Web 浏览器。问题是,每次用户点击网页时,数据库中都会生成 170MB 的文件并再次传输。
我想将文件流式传输给用户,以便他们尽快获取,然后将结果保存到 Web 服务器上的文件中。未来的请求将首先检查文件是否存在。如果是这样,它将发送文件而不是调用数据库。
我的问题:如何将写入 Response.Output 对象的内容存储到文件中?
您可以使用缓冲区,将部分数据保存到缓冲区,同时发送并保存它们......这里是一个例子:
byte[] buffer = new byte[4096];
int sourceBytes;
do
{
// read it - or fix the buffer content
sourceBytes = fs.Read(buffer, 0, buffer.Length);
// out put to the client
context.Response.OutputStream.Write(buffer, 0, sourceBytes);
// saved it to the file.
sWriter.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
也许是这样的:
var filePath = "c:\\temp\\file.dat";
if(System.IO.File.Exists(filePath))
{
using(var stream = System.IO.File.OpenRead(filePath))
WriteToResponseStream(stream);
}
else
{
byte[] file = GetFileFromDb();
WriteToResponseStream(new MemoryStream(file));
System.IO.File.WriteAllBytes(filePath, file)
}