繁体   English   中英

Response.TransmitFile并在传输后删除它

[英]Response.TransmitFile and delete it after transmission

我必须在我的网站上实施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();之前执行代码删除文件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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM