使用经典ASP中的大文件

时间:2009-05-29 12:43:13

标签: asp-classic

我想知道在经典asp中提供生成的大文件的最佳做法是什么。

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

这给出了一个问题,即在用户看到“另存为...”对话框之前需要4分钟。

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

使用经典的asp(使用某种流在服务器上创建文件)同时保持安全性是否容易? (URL应该让人们能够猜出其他文件的位置)

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

感谢。

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

3 个答案:

答案 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分钟才能生成,因此解决方案可能是:

  1. 为用户提供通过电子邮件发送文件(如果这是您服务器或托管中的可行解决方案)。

  2. 生成文件异步,并让用户知道文件生成何时完成(使用ajax调用,就像其他用户添加了答案时那样)

  3. 在服务器上生成文件

    '//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)

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