如何使用Coldfusion 8传送大文件?

时间:2013-05-10 15:57:27

标签: coldfusion coldfusion-8

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

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

我尝试使用Chrome,IE和一段java代码下载文件来下载文件(在一些迭代后冻结读取方法)。

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

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

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

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