首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Response.TransmitFile并在传输后删除

Response.TransmitFile并在传输后删除
EN

Stack Overflow用户
提问于 2010-04-22 12:38:09
回答 2查看 20K关注 0票数 9

我必须在我的网站上实现GEDCOM导出。

当单击“导出到gedcom”时,我的.net代码在服务器上创建了一个文件。

然后我需要将它从服务器下载到客户端,并且用户应该被问到保存该文件的位置,这意味着需要保存对话框。

下载后,我想从服务器上删除该文件。

我得到了一个代码来将文件从服务器传输到客户端:

代码语言:javascript
复制
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.TransmitFile(Server.MapPath("~/" + FileName));
Response.End();

从这个LINK

但是我不能删除这段代码之后的文件,因为Response.End结束了响应,所以在该行之后编写的任何代码都不会执行。

如果我在Response.End();之前编写删除文件的代码,那么文件不会传输,并且我会得到一个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-22 13:11:37

放在Response.End之后的任何东西都不会被执行,因为它会抛出一个ThreadAbortException来停止页面的执行。

试着这样做:

代码语言:javascript
复制
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);
}
票数 24
EN

Stack Overflow用户

发布于 2010-04-22 13:10:07

如果文件相当小,您可以将其加载到字节数组中,以便在仍能发送数据的情况下删除文件:

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2688282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档