将大型响应流的副本保存到Web服务器上的文件

时间:2013-05-13 16:32:33

标签: asp.net .net xmlwriter

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

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

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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)
}