我正在将大型CSV文件写入响应,并将Response.BufferOutput
设置为false。这是因为该文件可能需要很长时间才能下载,因此用户可以看到一些进度。我从对象生成CSV行,然后使用Response.Write()
写入响应。
这很好用但是如果在响应开始写入后出现意外错误,那么客户端将收到一个只包含部分数据的文件,可能会丢失许多行,但他们可能没有意识到。
有没有办法以某种方式取消文件下载而不缓冲所有内容?有没有办法表明响应无效,浏览器会忽略该文件?
下面的代码显示了我的代码的主要想法
public void StreamCsvFile(string fileName,List<myObject> myObjectList)
{
Response.Clear();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "filename=" + fileName);
Response.BufferOutput = false;
string headerLine = GetHeaderLine();
Response.Write(headerLine)
try
{
foreach(var myObject in myObjectList)
{
string line = myObject.ToCsvString();
Response.Write("\n" + line);
}
}
finally
{
Response.End();
}
}
答案 0 :(得分:0)