我想知道在经典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分钟,因此解决方案可能是:
  • 提供给用户通过电子邮件发送文件(如果这在您的服务器或主机中是可行的解决方案)。
  • 异步生成文件,并在文件生成完成时让用户知道(使用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一个免费软件应用程序,该软件每天在服务器上运行,以处理生成的临时文件。 (同样,这取决于您的服务器或主机)

    关于安全性
    使用随机数或GUIds生成文件以提供光线保护。如果数据敏感,则需要从ASP页下载文件,但我认为您将再次遇到相同的问题...(等待4分钟下载)

    关于asp-classic - 在经典ASP中使用大文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/925784/

  • 10-12 23:40