【发布时间】:2015-12-21 14:45:22
【问题描述】:
我正在将大型 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();
}
}
【问题讨论】:
-
您是否尝试过抛出异常(而不是捕获它)?
标签: c# asp.net asp.net-mvc file httpresponse