2

我正在使用 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 对象的自定义标签写入方法只允许写入字符串?

4

2 回答 2

4

我是为一个客户做的。我正在收集一些文件并将它们压缩以供下载。我没有将它们流式传输,而是将 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>
于 2013-05-10T16:17:05.403 回答
2

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

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

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

于 2013-05-12T20:22:09.513 回答