商品图片,用户上传的头像,其余方面的图片。目前业界存储图片有两种作法:php
一、 把图片直接以二进制形式存储在数据库中mysql
通常数据库提供一个二进制字段来存储二进制数据。好比mysql中有个blob字段。oracle数据库中是blob或bfile类型sql
二、 图片存储在磁盘上,数据库字段中保存的是图片的路径。数据库
1、图片以二进制形式直接存储在数据库中并发
第一种存储实现(php语言):oracle
大致思路:性能
一、将读取到的图片用php程序转化成二进制形式。再结合insert into 语句插入数据表中的blob类型字段中去。fetch
三、 从数据库取出图片展现的时候。则是直接发送图片内容this
四、 orm
$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对数据库性能调优方面的分析都能获得这个答案的:就是图片不要存储在数据库中。