使用Response.BinaryWrite()发送文件,然后删除它

时间:2009-08-20 11:02:46

标签: asp-classic

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

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

我尝试使用FileSystemObject.DeleteFile()在Response.WriteBinary()之后立即删除该文件,但这会导致客户端出现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*

3 个答案:

答案 0 :(得分:1)

我怀疑你正在调用DeleteFile方法,你正在尝试删除的文件当前被别的东西锁定了,问题是什么?

尝试包括: -

 stream.Close()
在BinaryWrite之后

。还要确保您已经使用了用于提取文件的组件。如果组件没有提供任何明显的“近距离”方法,他们会尝试将Nothing分配给引用它们的变量。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我认为这是最简单的管理方式,但我更倾向于在下载后删除文档的解决方案。