【问题标题】:How to deliver large file with Coldfusion 8?如何使用 Coldfusion 8 传递大文件?
【发布时间】:2013-05-10 15:57:26
【问题描述】:

我正在使用 Coldfusion 8,我正在尝试使用 cf_content 提供 15mo 的文件。问题是下载随机冻结。目前,我只在本地尝试过,因此网络不是问题。我尝试过使用较小的文件并且冻结发生的频率较低。我不知道问题的根源。这是我的冷融合代码:

<cfheader name="Content-Disposition" value="attachment; filename=test.zip">
<cfcontent type="application/zip" file="C:\Test.zip" deletefile="no">

我尝试使用 Chrome、IE 和一段 java 代码下载文件以下载文件(经过一些迭代后冻结在 read 方法上)。

您知道如何使用 Coldfusion 轻松流式传输文件吗?也许可以使用 Java 自定义标签,但是如何将字节写入页面,因为 Response 对象的自定义标签写入方法只允许写入字符串?

【问题讨论】:

  • 您的意思是 15MB 吗?您是否使用共享/托管环境?您在 ColdFusion 中使用什么 Web 服务器?
  • 您是否尝试过将文件放入网络空间并在不使用 cfcontent 的情况下下载它,就像使用 domain.com/test.zip 进行测试一样?
  • 如果你使用Apache也可以考虑mod_xsendfile
  • @Miguel-F 我的意思是 15MG。我没有使用共享/托管环境,而是使用 JRun。当我直接下载文件时,它可以正常工作。

标签: coldfusion coldfusion-8


【解决方案1】:

我是为客户做的。我正在收集一些文件并将它们压缩以供下载。我没有将它们流式传输,而是将 zip 文件保存在服务器上:

<cfzip action="zip" file="#expandpath('/data/briefcase/')##session.order_id#.zip" source="#expandpath('/data/briefcase/')##session.order_id#" overwrite="yes" storepath="no">

然后我为用户提供下载文件的链接。这样,如果失败了,他们总是可以再试一次。

然后我编写了一个每天运行的计划任务,并删除所有超过 24 小时的 zip 文件。

    <cfdirectory action="list" directory="#expandpath('/data/briefcase/')#" name="filelist" >
    <cfquery name="filter_file" dbtype="query" >
    SELECT * from filelist WHERE datelastmodified < #dateadd("h", -48, now())# AND type = 'File'
</cfquery>
    <cfquery name="filter_dir" dbtype="query" >
    SELECT * from filelist WHERE datelastmodified < #dateadd("h", -48, now())# AND type = 'Dir'
</cfquery>
    <cfset path = expandpath('/data/briefcase/')>

    <cfoutput query="filter_file">  
    <cfif fileexists('#directory#/#name#')>
        <cffile action="delete" file="#directory#/#name#" >
    </cfif>
</cfoutput>
<cfoutput query="filter_dir">
    <cfif directoryexists('#directory#/#name#')>
        <cfdirectory action="delete" directory="#directory#/#name#" recurse="true" >
    </cfif>
</cfoutput>

【讨论】:

  • 可以使用此解决方案,但我想流式传输文件。这可能吗?
【解决方案2】:

看看是否有助于在您的代码前添加:

<cfheader name="Content-Length" value="#GetFileInfo('C:\Test.zip').size#">

这告诉浏览器需要多少数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多