我想知道在经典asp中提供生成的大文件的最佳做法是什么。
我们有一个带有“export to excel”功能的应用程序,可生成10MB文件。 excel是通过调用一个.asp页面创建的,该页面的Response.ContentType设置为excel并且具有数据的HTML表。
这给出了一个问题,即在用户看到“另存为...”对话框之前需要4分钟。
我目前的解决方案是调用.asp页面,该页面使用AJAX在服务器上创建excel,并让页面返回生成的文档的URL。然后我可以使用javascript在原始页面上显示。
使用经典的asp(使用某种流在服务器上创建文件)同时保持安全性是否容易? (URL应该让人们能够猜出其他文件的位置)
我如何处理删除生成的文件超时?当数据实时变化时,必须定期删除它们。
感谢。
编辑:我现在意识到在服务器上创建文件可能还需要4分钟......
答案 0 :(得分:2)
我认为你选择一条复杂的路线,当解决方案足够简单时(尽管我可能缺少一些要求)
如果要生成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分钟才能生成,因此解决方案可能是:
为用户提供通过电子邮件发送文件(如果这是您服务器或托管中的可行解决方案)。
生成文件异步,并让用户知道文件生成何时完成(使用ajax调用,就像其他用户添加了答案时那样)
在服务器上生成文件
'//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我每天在服务器上运行的免费软件应用程序来处理生成的临时文件。 (再次,这取决于您的服务器或托管)
关于安全性
使用随机数或GUId生成文件以实现轻量级保护。如果数据是敏感的,您需要从ASP页面下载文件,但我认为您将再次遇到同样的问题...(等待4分钟下载)
答案 1 :(得分:0)
您打算如何生成Excel?我希望您不打算调用Excel来执行此操作,因为它不受支持,并且通常无法正常工作。
您应该检查是否有COM组件生成可以从Classic ASP调用的Excel。或者,为此目的添加一个ASP.NET页面。我知道有一个事实,即可以从ASP.NET页面调用组件来执行此操作。更糟糕的是,Infragistics的Excel导出器组件可以与UltraWebGrid控件一起导出。为了实现这一点,网格无需可见,但网格中的样式转换为电子表格中的样式。它们还允许您以编程方式操作电子表格。
答案 2 :(得分:0)