我有一个大型XML文件,我从SQL数据库生成并使用System.Xml.XmlWriter对象流式传输到客户端的Web浏览器。问题是,每次用户点击网页时,都会在数据库中生成170MB文件并再次传输。
我想将文件流式传输给用户,以便他们尽可能快地获取文件,然后将结果保存到Web服务器上的文件中。然后,将来的请求将首先检查文件是否存在。如果是,它将发送文件而不是调用DB。
我的问题:如何将写入Response.Output对象的内容存储到文件中?
答案 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)
}