新聞中心
實現數據庫存儲圖片技巧

我們提供的服務有:網站設計、成都做網站、微信公眾號開發(fā)、網站優(yōu)化、網站認證、準格爾ssl等。為上1000+企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的準格爾網站制作公司
在現代應用程序中,圖片是一個必不可少的元素,而且往往需要支持圖片上傳、處理、存儲、展示等功能。其中,存儲圖片是非常關鍵的一個環(huán)節(jié),傳統(tǒng)的做法是將圖片存儲在文件系統(tǒng)中,但是這樣存在一些問題,例如:不便于備份、遷移、不同步等。另外,當我們需要和數據庫進行集成時,就需要用到數據庫存儲圖片技巧。
本文將介紹如何在數據庫中存儲圖片,并重點講解以下技巧:
1. 以二進制數據存儲圖片
2. 使用Base64編碼圖片
3. 利用Blob類型存儲圖片
1. 以二進制數據存儲圖片
之一種方法是直接將圖片存儲在數據庫中的表中。具體的做法是在數據庫建立一個表,其中需要包含一個二進制類型(BLOB)的列,以存儲圖片數據。這種方式適用于小圖片,而對于大圖片,會造成數據庫性能問題。
以下是一個建立圖片存儲表的SQL語句:
“`
CREATE TABLE `image_table` (
`image_id` int(11) NOT NULL AUTO_INCREMENT,
`image_name` varchar(255) NOT NULL,
`image_content` blob NOT NULL,
PRIMARY KEY (`image_id`)
);
“`
其中image_id和image_name可以自行定義,image_content為二進制類型,并且不能為空。
2. 使用Base64編碼圖片
第二種方法是將圖片轉換為Base64編碼,然后存儲在數據庫中。Base64是一種基于64個字符的編碼方式,可以將任意二進制數據編碼成可打印的ASCII字符。這種方式適用于小圖片,而對于大圖片,雖然可以避免數據庫性能問題,但是會占用更多的存儲空間。
以下是一個建立圖片存儲表的SQL語句:
“`
CREATE TABLE `image_table` (
`image_id` int(11) NOT NULL AUTO_INCREMENT,
`image_name` varchar(255) NOT NULL,
`image_base64` text NOT NULL,
PRIMARY KEY (`image_id`)
);
“`
其中image_id和image_name可以自行定義,image_base64為文本類型,并且不能為空。
下面是一個將圖片轉換為Base64編碼的示例代碼:
“`
public static String imageToBase64(String imagePath) throws IOException {
InputStream inputStream = new FileInputStream(imagePath);
byte[] bytes = new byte[inputStream.avlable()];
inputStream.read(bytes);
inputStream.close();
return Base64.getEncoder().encodeToString(bytes);
}
“`
3. 利用Blob類型存儲圖片
第三種方法是將圖片存儲在數據庫中,但使用分離存儲技術,即將圖片存儲在操作系統(tǒng)文件系統(tǒng)中,通過數據庫中的Blob類型引用這些文件。這種方法可用于大圖片,并且保證了數據庫的高性能和存儲空間的有效利用。
以下是一個建立圖片存儲表的SQL語句:
“`
CREATE TABLE `image_table` (
`image_id` int(11) NOT NULL AUTO_INCREMENT,
`image_name` varchar(255) NOT NULL,
`image_blob` blob NOT NULL,
PRIMARY KEY (`image_id`)
);
“`
其中image_id和image_name可以自行定義,image_blob為二進制類型,并且不能為空。
下面是一個將圖片存儲到操作系統(tǒng)文件系統(tǒng)中,并返回Blob類型的示例代碼:
“`
public static Blob imageToBlob(String imagePath) throws IOException, SQLException {
FileInputStream fileInputStream = new FileInputStream(imagePath);
Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”, “password”);
PreparedStatement preparedStatement = connection.prepareStatement(“INSERT INTO image_table(image_name, image_blob) VALUES(?,?)”);
preparedStatement.setString(1, “image”);
preparedStatement.setBinaryStream(2, fileInputStream, fileInputStream.avlable());
preparedStatement.executeUpdate();
ResultSet resultSet = preparedStatement.getGeneratedKeys();
resultSet.next();
long imageId = resultSet.getLong(1);
preparedStatement.close();
connection.close();
return getBlob(imageId);
}
private static Blob getBlob(long imageId) throws SQLException {
Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”, “password”);
PreparedStatement preparedStatement = connection.prepareStatement(“SELECT image_blob FROM image_table WHERE image_id=?”);
preparedStatement.setLong(1, imageId);
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
Blob blob = resultSet.getBlob(1);
preparedStatement.close();
connection.close();
return blob;
}
“`
本文介紹了三種在數據庫中存儲圖片的技巧,側重于講解二進制存儲和Blob存儲,同時提供了Base64編碼存儲的示例代碼。對于不同的業(yè)務需求,可以選擇不同的存儲方式,但需要注意數據庫的性能和存儲空間的利用。建議盡量利用數據庫中高級類型,特別是Blob類型,來合理存儲圖片數據。
成都網站建設公司-創(chuàng)新互聯(lián),建站經驗豐富以策略為先導10多年以來專注數字化網站建設,提供企業(yè)網站建設,高端網站設計,響應式網站制作,設計師量身打造品牌風格,熱線:028-86922220php 數據庫圖片存儲問題?
相對路徑,從你項目根目錄開始的,取用的時候在拼接前邊的路徑,比如你在本地開發(fā),路徑輪檔存的是你的c盤,換臘粗亂到別人電腦上在d盤就不好使了,凳裂傳到服務器上同樣報錯
存儲的是相對路徑,可以到網站服務器上查看,應該有upload文件夾,里面就是存儲的圖片,這樣寫的好處是節(jié)省了數據庫存儲空間,轉移的時候可以直接將整個服務器的圖片打包轉移。
訪問的時候,前面可以拼接域名和指定的路盯正歷徑,這些后臺可以輕松獲取到,然后拼接上服務器的路徑,我們就可以直接在網頁問到圖片了。
這是很常見的圖片數據凱搜庫保存方式,和直接把圖片的二進制存入數據庫,這樣的方式便于檢索,占用空間小。當然,目前主流都采用oss來單獨存儲文件了,就是有專門的文件服務器,這個時候,一般存儲的是清弊完整的圖片路徑。
如果儲存具體的路徑,那么數據哪瞎段中將會包含很多重復的字串,會造成空間的浪費,所以一般都是儲存相對路徑(相對于頁面文件李譽的路徑),使用神櫻時只需要直接放入img標簽的src屬性中即可。
$file = $_FILES; //上傳的圖片相關信息
$suffix = strtolower(strrchr($file,’.’)); //返回后綴 wav strrchr分割獲取字符串 strtolower轉小寫
$filename = uniqid(“img_”,false); //生成以chat_pcm_開頭的唯一id
$uploadpath = ROOT_PATH.’uploads/’; //保存路徑
$file_up = $uploadpath.$filename.jpg; //保存文件的絕對路徑 路徑、文件名、后綴
$re = move_uploaded_file($file,$file_up); //move_uploaded_file() 函褲好數將上傳的文件移動到新位置。 參數乎純巖1:規(guī)定要移動的文件 參數2:移動到的位置
然后獲取名稱存進數據(進行數據庫操作)
數據庫存取圖片的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于數據庫存取圖片,「實現數據庫存儲圖片技巧」,php 數據庫圖片存儲問題?的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,經過多年的不懈努力,公司現已經成為一家專業(yè)從事IT產品開發(fā)和營銷公司。廣泛應用于計算機網絡、設計、SEO優(yōu)化、關鍵詞排名等多種行業(yè)!
當前標題:「實現數據庫存儲圖片技巧」(數據庫存取圖片)
本文路徑:http://www.5511xx.com/article/djodiih.html


咨詢
建站咨詢
