關於圖片或者文件在數據庫的存儲方式歸納


商品圖片,用戶上傳的頭像,其他方面的圖片。目前業界存儲圖片有兩種做法:

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對數據庫性能調優方面的分析都能得到這個答案的:就是圖片不要存儲在數據庫中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM