响应。transmitfile并在传输后删除它
-
30-09-2019 - |
题
我必须在我的网站中实现GEDCOM导出。
当导出到GEDCOM单击时,我的.NET代码在服务器上创建了一个文件。
然后,我需要从服务器下载它给客户端,并应要求用户在哪里保存该文件,这意味着需要Savedialog。
下载后,我想从服务器中删除该文件。
我有一个代码将文件从服务器传输到客户端:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();
由此 关联
但是我无法在此代码之后删除文件 Response.End
结束响应,以便在该行之后编写的任何代码未执行。
如果我执行代码以删除文件之前 Response.End();
, ,然后文件不会传输,我会遇到错误。
解决方案
您在响应后放置的任何内容都不会被执行,因为它会引发ThreadAbortException以停止执行页面。
反试试:
string responseFile = Server.MapPath("~/" + FileName);
try{
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(responseFile);
Response.Flush();
}
finally {
File.Delete(responseFile);
}
其他提示
如果文件相当小,则可以将其加载到字节数组中,以便可以删除文件,同时仍能发送数据:
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
string path = Server.MapPath("~/" + FileName);
byte[] data = File.ReadAllBytes(path);
File.Delete(path);
Response.BinaryWrite(data);
Response.End();
不隶属于 StackOverflow