Asp classic 在经典ASP中处理大文件

Asp classic 在经典ASP中处理大文件,asp-classic,Asp Classic,我想知道在经典asp中为生成的大文件提供服务的最佳实践是什么 我们有一个具有“导出到excel”功能的应用程序,可以生成10MB的文件。excel是通过调用一个.asp页面创建的,该页面的Response.ContentType设置为excel,并且有一个用于数据的HTML表 这就产生了一个问题,用户需要4分钟才能看到“另存为…”对话框 我目前的解决方案是调用一个.asp页面,该页面使用AJAX在服务器上创建excel,并让该页面返回生成文档的URL。然后我可以使用javascript在原始页面

我想知道在经典asp中为生成的大文件提供服务的最佳实践是什么

我们有一个具有“导出到excel”功能的应用程序,可以生成10MB的文件。excel是通过调用一个.asp页面创建的,该页面的Response.ContentType设置为excel,并且有一个用于数据的HTML表

这就产生了一个问题,用户需要4分钟才能看到“另存为…”对话框

我目前的解决方案是调用一个.asp页面,该页面使用AJAX在服务器上创建excel,并让该页面返回生成文档的URL。然后我可以使用javascript在原始页面上显示

使用经典asp(使用某种流在服务器上创建文件)并牢记安全性,这样做容易吗?(URL应该使人们能够猜测其他文件的位置)

我将如何超时处理已删除的生成文件?随着数据的实时变化,它们必须定期删除

谢谢


编辑:我现在意识到在服务器上创建文件可能也需要4分钟…

您计划如何生成Excel?我希望您不打算调用Excel来实现这一点,因为它不受支持,而且通常不会很好地工作


您应该检查是否有COM组件可以生成Excel,您可以从经典ASP调用这些组件。或者,为此添加一个ASP.NET页面。我知道有一些组件可以从ASP.NET页面调用来实现这一点。更糟糕的是,Infragistics提供了一个Excel exporter组件,它与UltraWebGrid控件一起工作以导出。网格不必可见,但网格中的样式将转换为电子表格中的样式。它们还允许您以编程方式操作电子表格。

我认为您选择的是一条复杂的路线,而解决方案足够简单(尽管我可能缺少一些要求)

如果要生成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所选择格式的更多信息,请参阅

编辑 由于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
    
    删除生成的临时文件
    我使用每天在服务器上运行的免费应用程序来处理生成的临时文件。(同样,这取决于您的服务器或主机)

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

  • 使用FSO读取文件
  • 为Excel文件类型、根据文件读取的名称和下载设置标题(附件)
  • 设置标头后刷新响应。客户端应显示“另存为”对话框
  • 将FSO输出到响应。客户端将下载文件并查看进度条

  • 约翰:使用ASP classic(或任何相关的东西)生成一个开放格式的XML excel文件真的很容易。我想你把事情弄得有点复杂了。注意,我问他将如何创建Excel。我不能假设他会将其生成为XML,特别是因为我看到人们试图通过COM调用Excel来实现这一点!我目前正在通过一个HTML表格并在excel上设置response.contenttype。我们目前就是这样做的,但用户需要很长时间才能看到弹出的“另存为…”对话框。。服务器必须先缓冲4500,然后才能向用户提供excel下载。这需要相当长的时间。但您可能是对的,首先在服务器上生成文件不会提高速度。。我真的没想过。托马斯:在生成文件时,不时使用Response.flush怎么样。有什么不同吗?(我在过去使用过它,但从未测试过它是否有任何区别)这是响应缓冲区之类的东西吗?使用该选项会使数据显示在常规浏览器窗口中,而不是在另存为对话框中提供..+1,这是异步通知的一般概念。但是请注意,VBScript没有open语句。Scripting.FileSystemObject或ADODB.Stream是在服务器端创建文件所需的工具。请编辑此问题,说明您现在如何生成Excel,以及与“大”文件一起使用时会导致什么问题。完成,感谢您的建议