我正在尝试使用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#">
答案 0 :(得分:5)
首先,确保您在管理员的数据库高级连接设置中启用了BLOB,或者缓冲区足够大以处理图像。
其次,我尝试测试生成只是图像,而不是将其内嵌到页面中,以查看结果实际是什么。
答案 1 :(得分:1)
我建议将文件存储在文件系统中,并将文件名存储在数据库中。数据库针对存储和检索固定宽度值进行了优化;存储巨大的文件没有高效性。