我想知道在经典ASP中服务于生成的大文件的最佳实践是什么。
我们有一个具有“导出到excel”功能的应用程序,该应用程序可以生成10MB的文件。 excel是通过仅调用.asp页面创建的,该页面的Response.ContentType设置为excel,并且具有用于数据的HTML表。
出现这样的问题,即用户需要4分钟才能看到“另存为...”对话框。
我当前的解决方案是调用.asp页面,该页面使用AJAX在服务器上创建excel,并让该页面返回生成的文档的URL。然后,我可以使用javascript在原始页面上显示。
在考虑安全性的同时,使用经典的asp(在服务器上以某种流创建文件)是否容易做到这一点? (URL应该使人们能够猜测其他文件的位置)
我将如何处理超时删除生成的文件?随着数据实时更改,必须定期删除它们。
谢谢。
编辑:我现在意识到,在服务器上创建文件可能还需要4分钟...
最佳答案
我认为您在解决方案足够简单时就选择了一条复杂的路线(尽管我可能会缺少一些要求)
如果要生成Excel,只需调用执行以下操作的ASP页面:
Response.clear
Response.AddHeader "content-disposition", "attachment; filename=myexcel.xls"
Response.ContentType = "application/excel"
'//write the content of the file
Response.write "...."
Response.end
这将启动浏览器中的下载过程,而无需生成额外的调用,javascript或其他任何内容
有关您将选择生成Excel格式的更多信息,请参见this question。
编辑
由于Thomas更新了问题,真正的问题是生成文件需要4分钟,因此解决方案可能是:
在服务器上生成文件
'//You should change for a random name or something that makes sense
FileName = "C:\temp\myexcel.xls"
FileNumber = FreeFile
Open FileName For Append As #FileNumber
'//generate the content
TheRow = "...."
Print #FileNumber, TheRow
Close #FileNumber
删除生成的临时文件
我使用Empty Temp Folders一个免费软件应用程序,该软件每天在服务器上运行,以处理生成的临时文件。 (同样,这取决于您的服务器或主机)
关于安全性
使用随机数或GUIds生成文件以提供光线保护。如果数据敏感,则需要从ASP页下载文件,但我认为您将再次遇到相同的问题...(等待4分钟下载)
关于asp-classic - 在经典ASP中使用大文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/925784/