1

我有一个大型 XML 文件,我从 SQL 数据库生成并使用 System.Xml.XmlWriter 对象流式传输到客户端的 Web 浏览器。问题是,每次用户点击网页时,数据库中都会生成 170MB 的文件并再次传输。

我想将文件流式传输给用户,以便他们尽快获取,然后将结果保存到 Web 服务器上的文件中。未来的请求将首先检查文件是否存在。如果是这样,它将发送文件而不是调用数据库。

我的问题:如何将写入 Response.Output 对象的内容存储到文件中?

4

2 回答 2

0

您可以使用缓冲区,将部分数据保存到缓冲区,同时发送并保存它们......这里是一个例子:

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);
于 2013-05-13T16:48:49.517 回答
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)
}
于 2013-05-13T16:57:36.530 回答