使用Coldfusion在MySQL中保存文件

时间:2009-09-17 18:52:34

标签: mysql coldfusion

我正在尝试使用Coldfusion将从表单上传的文件(pdf或图像)保存到MySQL数据库中。我将文件作为二进制数据保存到数据库中,该数据库的列设置为BLOB但无法将文件写回屏幕。将文件保存在数据库中然后在Coldfusion中检索文件的正确方法是什么?注意:客户希望文件存储在数据库中而不是文件系统中。

在数据库代码中保存文件

<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#">

2 个答案:

答案 0 :(得分:5)

首先,确保您在管理员的数据库高级连接设置中启用了BLOB,或者缓冲区足够大以处理图像。

其次,我尝试测试生成只是图像,而不是将其内嵌到页面中,以查看结果实际是什么。

答案 1 :(得分:1)

我建议将文件存储在文件系统中,并将文件名存储在数据库中。数据库针对存储和检索固定宽度值进行了优化;存储巨大的文件没有高效性。