2009-09-17 39 views
2

我試圖使用Coldfusion將從表單上載的文件(pdf或圖像)保存到MySQL數據庫中。我將文件保存爲二進制數據到列設置爲BLOB的數據庫中,但無法將文件寫回到屏幕。在Coldfusion中保存文件然後檢索文件的正確方法是什麼?注意:客戶希望文件存儲在數據庫中而不是文件系統中。使用Coldfusion在MySQL中保存文件

文件保存在數據庫代碼

<cffile action="upload" filefield="form.file_upload" destination="#fileDirectory#" result="file_result" nameconflict="makeunique"> 

<cfif #file_result.fileWasSaved# IS 'Yes'> 
    <cfset title = Evaluate('form.file_title')> 

    <cffile action="readbinary" file="#fileDirectory#/#file_result.serverFile#" variable="file_binary_data"> 

    <cfquery name="insertFile" datasource="#request.app.datasource#"> 
    INSERT INTO (table) (form_id, file_name, file_info) 
    VALUES ('#form_id#', <cfqueryparam value="#title#" cfsqltype="CF_SQL_VARCHAR">, <cfqueryparam value="#file_binary_data#" cfsqltype="CF_SQL_BLOB">) 
    </cfquery> 

寫入文件返回到畫面

<cfheader name="content-length" value="#ArrayLen(getFile.file_info)#" /> 
<cfheader name="content-disposition" value="inline; filename=#getFile.file_name#.gif" /> 
<cfcontent type="image/*" variable="#getFile.file_info#"> 

回答

5

首先,請確保您在管理員的數據庫高級連接設置中啓用了BLOB,或者緩衝區足夠大以照顧圖像。

其次,我會嘗試測試生成只是圖像,而不是將其內聯寫入頁面,看看結果實際上是什麼。

+0

謝謝,增加MySQL中的緩衝區並更新Coldfusion中的dsn以接受BLOBs讓它工作! –

1

我會建議存儲在文件系統中的文件,並存儲在數據庫中的文件名。數據庫針對存儲和檢索固定寬度值進行了優化;不存在高性能的存儲大文件。

+0

通常我會存儲在文件系統中,但客戶端需要存儲在數據庫中的文件。 –

+0

您是否已經向客戶講解了存儲文件名而不是二進制數據的原因? –