商品圖片,用戶上傳的頭像,其餘方面的圖片。目前業界存儲圖片有兩種作法: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對數據庫性能調優方面的分析都能獲得這個答案的:就是圖片不要存儲在數據庫中。