2

我的代码是这样的

HttpContext.Current.Response.Clear();
     HttpContext.Current.Response.ContentType = "application/pdf";
     HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + "name" + ".pdf");
     HttpContext.Current.Response.TransmitFile("~/media/pdf/name.pdf");
     HttpContext.Current.Response.End();
     if (FileExists("/media/pdf/name.pdf"))
     {
         System.IO.File.Delete("D:/Projects/09-05-2013/httpdocs/media/pdf/name.pdf");
     }

在这里我想在浏览器中下载name.pdf,下载后我想删除那个文件。但是代码执行停止在

HttpContext.Current.Response.End();

该行执行后没有代码。所以我的删除功能不起作用。这个问题有什么解决方法吗?

4

4 回答 4

5
// Add headers for a csv file or whatever
Response.ContentType = "text/csv"
Response.AddHeader("Content-Disposition", "attachment;filename=report.csv")
Response.AddHeader("Pragma", "no-cache")
Response.AddHeader("Cache-Control", "no-cache")

// Write the data as binary from a unicode string
Dim buffer As Byte()
buffer = System.Text.Encoding.Unicode.GetBytes(csv)
Response.BinaryWrite(buffer)

// Sends the response buffer
Response.Flush()

// Prevents any other content from being sent to the browser
Response.SuppressContent = True

// Directs the thread to finish, bypassing additional processing
HttpContext.Current.ApplicationInstance.CompleteRequest()
于 2013-05-24T09:47:45.707 回答
4

HttpResponse.End(根据文档)引发 aThreadAbortException并且由于您没有尝试处理此问题,因此您的方法退出。

我不确定为什么必须使用 End(),但可以将“清理”代码放在 finally 语句中。

于 2013-05-24T09:36:15.807 回答
1

我遇到过同样的问题。试试这个:复制到 MemoryStream -> 删除文件 -> 下载。

string absolutePath = "~/your path";
try {
    //copy to MemoryStream
    MemoryStream ms = new MemoryStream();
    using (FileStream fs = File.OpenRead(Server.MapPath(absolutePath))) 
    { 
        fs.CopyTo(ms); 
    }

    //Delete file
    if(File.Exists(Server.MapPath(absolutePath)))
       File.Delete(Server.MapPath(absolutePath))

    //Download file
    Response.Clear()
    Response.ContentType = "image/jpg";
    Response.AddHeader("Content-Disposition", "attachment;filename=\"" + absolutePath + "\"");
    Response.BinaryWrite(ms.ToArray())
}
catch {}

Response.End();
于 2014-09-24T09:03:52.153 回答
1

可能会触发一些异步方法(触发并忘记样式)来删除文件,或者在服务器上有清理服务以在特定时间和规则后删除所有文件。

就像提到的那样 Reponse.End 非常苛刻和最终......更多细节在这里: Response.End() 被认为是有害的吗?

只是我的想法...... =)

于 2013-05-24T09:37:42.727 回答