Asp classic 使用Response.BinaryWrite()发送文件,然后将其删除

Asp classic 使用Response.BinaryWrite()发送文件,然后将其删除,asp-classic,Asp Classic,作为经典ASP项目的一部分,用户应该能够通过调用“document.ASP?id=[some id here]”下载一个文件,该文件从zip存档中动态提取并通过Response.BinaryWrite()发送 提取和发送不是问题,但我需要在下载完成后删除提取的文件。我以前从未做过任何ASP或VBA,我想这就是我为什么留在这里的原因 我尝试在Response.WriteBinary()之后使用FileSystemObject.DeleteFile()删除该文件,但这导致客户端出现404错误 如何等

作为经典ASP项目的一部分,用户应该能够通过调用“document.ASP?id=[some id here]”下载一个文件,该文件从zip存档中动态提取并通过Response.BinaryWrite()发送

提取和发送不是问题,但我需要在下载完成后删除提取的文件。我以前从未做过任何ASP或VBA,我想这就是我为什么留在这里的原因

我尝试在Response.WriteBinary()之后使用FileSystemObject.DeleteFile()删除该文件,但这导致客户端出现404错误

如何等待下载完成,然后执行其他操作

编辑:我的代码是这样的:

'Unzip a specified file from an archive and put it's path in *document*

set stream = Server.CreateObject("ADODB.Stream")
stream.Open
stream.Type = 1 ' binary
stream.LoadFromFile(document)

Response.BinaryWrite(stream.Read)

'Here I want to delete the *document*

不可能将文件流式传输到内存中,然后将流二进制写入浏览器,这样就不会在服务器上创建文件,也不需要删除它。

我怀疑您调用DeleteFile方法的那一点您尝试删除的文件当前被其他东西锁定,问题是什么

尝试包括:-

 stream.Close()

在你的二进制代码之后写。还要确保您已经完成了与用于提取文件的组件类似的操作。如果组件没有提供任何明显的“关闭”方法,他们会尝试为引用它们的变量分配
Nothing

我找到了一个解决方案:提取的文件保存在一个特殊目录中,每次用户运行document.asp时,它都会检查该目录中是否有超过一小时的文件并将其删除


我认为这是最简单的管理方法,但我更喜欢在下载后删除文档的解决方案。

正如我所说,文件从存档中解压缩,我认为无法将其直接提取到流中。当然,我想这可能取决于您使用的组件。在这种情况下,如果您必须保存到磁盘,例如保存到“temp”文件夹,您可以构建一个windows服务来清理特定年龄段的文件?这对我来说不是一个选项。ASP网站只是一个大项目的一小部分,我不能期望客户为一个他可能永远不会使用的功能安装windows服务。如果它很少使用的功能,只需通过正常的维护程序定期填充临时文件夹并删除临时文件。这是可能的,但这不是好办法。由于某些原因,当客户经常使用此功能时,临时文件夹中的文档数量将快速增长。我找到了一种不同的方法来处理我的问题,请看我的答案。你在向WriteBinary传递什么?你能把你正在做的事情显示为一些实际的代码吗?我试过stream.Close(),但没有效果。我得到了与之前相同的404错误,我确信它与zip组件无关,因为它是一个通过WScript.Shell.Run()调用的C程序。