是否有下载的“事件”?

时间:2012-08-22 15:17:30

标签: asp.net vb.net error-handling

我想知道是否有人知道这一个。

我的asp.net vb网络应用程序出现了一个相当严重的错误。我告诉你,我的额头上几乎有qwerty,因为我的头靠在键盘上。但我想我找出了错误的原因:

我有以下代码:

 fileToDownload = createFileSet(fileToDownload, confirm)
                    HttpContext.Current.Response.ClearContent()
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileToDownload.Name)
                    HttpContext.Current.Response.AddHeader("Content-Length", fileToDownload.Length.ToString())
                    HttpContext.Current.Response.ContentType = ReturnExtension(fileToDownload.Extension.ToLower())
                    HttpContext.Current.Response.TransmitFile(fileToDownload.FullName)
                    HttpContext.Current.ApplicationInstance.CompleteRequest()
                    Directory.Delete("C:\temp_" & confirm, True)
                    'System.IO.File.Delete(fileToDownload.FullName) <--- Error here

当我把最后一行的注释勾掉时,我得到一个真正难看的错误(我可以重做它并拼出来,出现什么样的错误,但这无关紧要。)

我想我知道原因。用户正在下载文件,或正在处理或正在处理,程序正在尝试删除它...导致错误。

有没有办法创建一些on HttpContext.Current.Response.TransmitFile.complete(编写代码),还是我使用批处理文件和Windows调度程序来清理不再需要的这些文件?

你认为我的错误结论是否正确?我真的没有看到创建“on event”的方法,但我在asp.net上太新了,无法确切知道。

1 个答案:

答案 0 :(得分:0)

尝试使用finally块(从http://forums.asp.net/t/1436818.aspx/1获得想法)。 Inshort这样做......

try {
 fileToDownload = createFileSet(fileToDownload, confirm)
                    HttpContext.Current.Response.ClearContent()
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileToDownload.Name)
                    HttpContext.Current.Response.AddHeader("Content-Length", fileToDownload.Length.ToString())
                    HttpContext.Current.Response.ContentType = ReturnExtension(fileToDownload.Extension.ToLower())
                    HttpContext.Current.Response.TransmitFile(fileToDownload.FullName)
                    HttpContext.Current.ApplicationInstance.CompleteRequest()
                    Directory.Delete("C:\temp_" & confirm, True)
} finally {
    System.IO.File.Delete(fileToDownload.FullName)
}

或者这样做:

您可以将zip文件内容读入内存流,删除该文件,然后将内存流推送到响应缓冲区。只有我可以看到的问题是,如果下载失败并且他们想要尝试再次获取它。无论如何,有一篇文章介绍如何处理文件和内存流并将其推送到响应缓冲区http://www.c-sharpcorner.com/UploadFile/jhblankenship/DownloadingFromMemStream11262005060834AM/DownloadingFromMemStream.aspx