數據庫如何存取圖片?

婲瓣


數據庫存圖片的方式以下兩種:

在數據庫中存儲圖片文件的文件名或存儲路徑(本地路徑或者網絡路徑)

這是最常用的方式,即是將圖片的存儲的完整路徑或文件名以字符串的方式存入到數據庫中,讀取效率高、而且便於維護。實現的方法也比較簡單,拿最常見的使用場景來說吧,比如用戶註冊時,需要他上傳了一張照片,常見做法就是使用文件控件FileUpload讓用戶選擇電腦的上面的圖片,然後將其選擇的圖片所在的路徑及文件名獲取,將文件上傳後同時將文件名保存到數據庫對應的表中,顯示圖片時只需要從數據庫中獲取文件名並構造完整路徑即可。

ASP.NET

代碼如下:

//獲取FileUpload控件選取圖片後的文件路徑

strng filepath=FileUpload1.PostedFile.FileName;

//獲取圖片文件名,即從圖片路徑字符串中獲取最後\\\\的那段

string filename=filepath.Substring(filepath.LastIndexOf("\\\\")+1);

//然後執行文件上傳,將文件保存到服務器指定的目錄,如在程序目錄下建立一個PIC文件夾保存文件

FileUpload1.PostedFile.SaveAs(Server.MapPath("PIC/")+filename);

上傳成功後,將文件名filename字符串插入數據庫即可。

顯示時將filename從數據取出,用Image1.ImageUrl="PIC/"+filename 顯示。


將圖片文件轉為二進制文件流保存到數據庫,顯示時再二進制轉為文件

這種方式很少用,因為圖片包含的信息比較多,轉為二進制後存儲的內容大,佔用空間,而且需要轉換,費時好資源。

保存圖片的 核心代碼如下:

//文件路徑

string picturePath = @"D:\\1.jpg";

//創建FileStream對象

FileStream fs = new FileStream(picturePath, FileMode.Open, FileAccess.Read);

Byte[] mybyte = new byte[fs.Length];

//讀取數據

fs.Read(mybyte, 0, mybyte.Length);

fs.Close();

//轉換成二進制數據 mybyte 保存到數據庫

SqlParameter prm = new SqlParameter

("@blobdata\


慧鳥先飛


對於一款系統而言,難免會涉及到用戶上傳的圖片數據,為了保證數據落地我們需要把圖片信息存入在數據庫中,解決方案主要有以下兩種:

1、將圖片路徑存入數據庫中

這種做法是我們推薦的,因為數據數據一般較多較大,為便於存取我們一般將圖片上傳到服務器的某個目錄中,然後將其引用路徑存儲到數據庫中。這樣一來,某條記錄展示時就能找到與之對應的圖片路徑,然後加載引用即可。

2、將圖片以二進制數據流形式寫入數據庫字段中

這種做法並不推薦,因為性能較低、佔用存儲空間較大,不利於數據庫優化。具體做法是:圖片上傳時讀取此圖的二進制數據,然後存入數據庫字段中,這裡對數據庫字段類型也是有一定要求的,比如說:MySQL中字段選BLOB類型、SQL Server中選image類型。

將圖片二進制數據存入數據庫後,如果要顯示圖片則需要從數據庫中查詢獲取到二進制數據,然後前端讀取base64二進制字符串,說實話這種形式不夠優雅。


以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!

網絡圈


這涉及到字段類型的問題,如果使用二進制類型的字段就可以存放圖片字段了!

我想題主要問的是如何將圖片寫入到數據庫吧,這確實是個問題,文件是流,那寫入也得使用流了,這就要求數據庫驅動提供流寫入方式了,還好大多驅動都實現了方法,比如JDBC,ODBC等,實在太多了,不過某些框架不提供功能!


數據指揮


數據庫內部存儲圖片內存消耗太大,而且速度很慢,一般在開發的時候報圖片單獨放在一個images文件夾裡,在數據庫裡存放圖片的存儲路徑,當開發的時候訪問數據庫時就可以把圖片加載出來。


分享到:


相關文章: