使用Coldfusion在MySQL中保存文件

使用Coldfusion在MySQL中保存文件,mysql,coldfusion,Mysql,Coldfusion,我正在尝试使用Coldfusion将从表单上传的文件(pdf或图像)保存到MySQL数据库中。我正在将文件作为二进制数据保存到数据库中,该数据库的列设置为BLOB,但无法将文件写回屏幕。在数据库中保存文件,然后在Coldfusion中检索文件的正确方法是什么?注意:客户端希望文件存储在数据库中,而不是文件系统中 在数据库代码中保存文件 <cffile action="upload" filefield="form.file_upload" destination="#fileDirecto

我正在尝试使用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>

插入(表格)(表格id、文件名、文件信息)
值('#form#id#',)
将文件写回屏幕

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


我建议将文件存储在文件系统中,并将文件名存储在数据库中。数据库优化为存储和检索固定宽度值;在那里存储巨大的文件没有性能

首先,确保在Administrator中的DB advanced connection设置中启用了BLOB,或者缓冲区足够大,足以处理图像


其次,我会尝试只生成图像,而不是将其内联写入页面,以查看实际结果。

通常我会将文件存储在文件系统中,但客户端希望将文件存储在数据库中。您是否与客户端谈过,解释存储文件名而不是二进制数据的原因?谢谢,在MySQL中增加缓冲区并在Coldfusion中更新dsn以接受BLOB使其正常工作!