我想知道是否有人知道这一个。
我的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上太新了,无法确切知道。
答案 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