2013-05-10 35 views
2

我正在使用Coldfusion 8,並試圖用cf_content提供15mo的文件。問題是下載隨機凍結。目前,我只在本地嘗試,因此網絡不是問題。我嘗試過更小的文件,凍結髮生的次數也更少。我不知道問題的根源。這裏是我的ColdFusion代碼:如何使用Coldfusion 8傳輸大文件?

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

我嘗試下載文件,瀏覽器,IE瀏覽器,並用一塊java代碼下載(一些迭代後凍結的讀法)的文件。

您是否對使用Coldfusion輕鬆流式傳輸文件有所瞭解?也許有可能使用Java自定義標籤,但是如何將頁面寫入字節,因爲Response對象的自定義標籤寫入方法只允許編寫一個字符串?

+0

您的意思是15MB?你在使用共享/託管環境嗎?您使用ColdFusion的什麼Web服務器? – 2013-05-10 16:06:08

+0

您是否曾嘗試將該文件放在網絡空間中,並且沒有使用cfcontent進行下載,就像使用domain.com/test.zip進行測試一樣? – Travis 2013-05-10 16:12:07

+0

你也可以考慮mod_xsendfile如果你使用Apache – Henry 2013-05-10 20:10:19

回答

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> 
+0

可以使用此解決方案,但我想流式傳輸文件。那可能嗎? – Abbadon 2013-05-11 07:59:42

2

看是否有助於預先考慮您的代碼:

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

,告訴瀏覽器多少數據的期望。