【问题标题】:Save a copy of a large response stream to file on web server将大型响应流的副本保存到 Web 服务器上的文件
【发布时间】:2013-05-13 16:32:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net .net xmlwriter


    【解决方案1】:

    你可以使用缓冲区,将部分数据保存到缓冲区,同时发送和保存……这里是一个例子:

    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);
    

    【讨论】:

      【解决方案2】:

      可能是这样的:

      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)
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-24
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多