如果我们要将一个图片文件二进制于数据库中,那么我们就必须将图片文件转化为二进制数据内容,再将二进制数据存储至数据库中,这是图片存储(或是其它文件数据库存储)的基本原则。

至于要从数据库中读取图片数据并将它在页面中显示,我们所需要操作的步骤自然是与前面相反既可。从数据库中读取的图片信息是二进制的,那么我们就必须将它转化为原来的字符类型才能正常显示。

下面我们将示例一个图片文件读取存储至数据库并从数据库中读取图片信息并显示的案例:

1、首先读取硬盘上的某一具体图片文件,读取模式设置为readBinary方式:

<cffile action = "readBinary" file = "temp directory here#file.serverFile#" variable = "test">

2、将读取出来的二进制内容存储至数据库中(注:数据库字段需设置成能存储图片类型的字段,如blob类型):

<cfquery name = "insertImage" datasource = "datasource">
 insert into imageTest values (<cfqueryparam cfsqltype="cf_sql_blob" value="#test#">)
 </cfquery>

通过1、2两个步骤,我们轻松实现了读取图片文件并存储至数据库的操作过程。

3、从数据库中读取图片信息,该文件可命名为dispImage.cfm:

<!--- 在此需特别注意enablecfoutputonly的压缩空白功能,如果不对该页面进行空白压缩,很可能会造成图片无法显示的问题 --->
<cfprocessingdirective suppressWhiteSpace="yes">
 <cfsetting enablecfoutputonly="yes">
 <!--- 读取相应的图片信息 --->
 <cfquery name = "getImage" datasource = "datasource">
 select image from imageTest where id = #some variable here#
 </cfquery>
 <!--- 设置浏览器输出的格式,我们将它设置为图片的JPG类型,用户可根据实际情况改动类型设置 --->
 <cfcontent type="image/jpg">
 <!--- 输出图片 --->
 <cfoutput>#toString(imageTest.image)#</cfoutput>
 </cfprocessingdirective>
 <cfabort>

4、显示图片内容,调用dispImage.cfm页面:

<img src = "dispImage.cfm?id=your variable here">

通过3、4两个步骤,我们也很容易的就完成了从数据库中读取图片信息并在页面显示的功能。
总结:实际上,除了图片文件可以如此处理,其它的文件也能通过类似方式进行处理,可将任意文件类型存储至数据库,只是文件大小的原因以及数据库存储读取速度性能限制,我们基本上还是不建议将文件存储至数据库,毕竟硬盘读取要快得多。



2007-09-03 12:23 疯蜂