您的位置:首页 > 数据库

关于图片或者文件在数据库的存储方式归纳

2013-12-10 17:10 633 查看
商品图片,用户上传的头像,其他方面的图片。目前业界存储图片有两种做法:

1、 把图片直接以二进制形式存储在数据库中

一般数据库提供一个二进制字段来存储二进制数据。比如mysql中有个blob字段。oracle数据库中是blob或bfile类型

2、 图片存储在磁盘上,数据库字段中保存的是图片的路径。

一、图片以二进制形式直接存储在数据库中

第一种存储实现(php语言):

大体思路:

1、将读取到的图片用php程序转化成二进制形式。再结合insert into 语句插入数据表中的blob类型字段中去。

3、 从数据库取出图片展示的时候。则是直接发送图片内容

4、

$row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row->this_image;

实现代码如下:

$PicturePath = ‘/tmp/xxxjgjgj.jpg’;//假设这是上传的图片,php放在一个临时文件夹。脚本执行完毕后自动删除了。

$imgStream = fread(fopen($PicturePath, "r");

$blob_img = fread(fopen($imgStream, "r"), filesize($PicturePath));

$sql =” INSERT INTO Images (this_image) VALUES ($blob_img)";

注:this_image就是数据表中一个blob字段类型的字段

================取出展示图片代码

$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query"); $row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row-> this_image;

总结:处理代码感觉还真比较麻烦。其实,我从来没用过在数据库中以二进制存储图片的做法。我们用得更多的是存储图片的路径,实际图片是在磁盘上保存的。

据我了解,互联网环境中,大访问量,数据库速度和性能方面很重要。一般在数据库存储图片的做法比较少,更多的是将图片路径存储在数据库中,展示图片的时候只需要连接磁盘路径把图片载入进来即可。因为图片是属于大字段。一张图片可能1m到几m。

有个原则:图片尽量不要存储在数据库中。这样的大字段数据会加重数据库的负担,拖慢数据库。在大并发访问的情况下很重要。这是一个经验。去看看dba对数据库性能调优方面的分析都能得到这个答案的:就是图片不要存储在数据库中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: