簡體   English   中英

Codeigniter:將圖像數據存儲在數據庫中的首選方法

[英]Codeigniter: preferred approach to store images data in a database

我需要將圖像數據存儲在數據庫中。 我正在將圖像上傳到服務器,然后,當然,我需要從數據庫中檢索它們。 我知道在數據庫中我應該只存儲數據,而將實際文件保留到文件系統中,所以我試圖考慮哪一個可能是保存這些數據的最佳方法。

最讓我困擾的是選擇命名方案。 在數據庫中,我將只有一個filename名列,其中僅存儲文件名和擴展名。 沒有路徑,因此可以在我的應用程序中對其進行配置。 因此:文件名應使用什么? 我想保留一個有意義的名稱,因此保留照片標題或至少其中一部分很酷。 但是要確保唯一性,哪一種可能是最好的方法?

我知道Codeigniter有一個字符串幫助器,但是我也閱讀了有關使用php函數uniqid的信息。 然后,我可以將id附加到圖片名稱。

你有什么建議?

只要將整個映像存儲在數據庫中,就可以隨意存儲,只要沒有成千上萬的映像即可(或者您只是喜歡購買昂貴的SCSI驅動器:)。 如果不確定,文件系統也可以。

對於圖像的唯一ID,最好的方法可能是僅使用數據庫插入ID(保證唯一,沒有線程/沖突/打擾)。 因此,假設您想將圖像保留在文件系統中,這是一個很好的方法:

create table images (
   image_id int(20) primary key auto_increment, /* assumes mysql */
   file_path varchar(2500) not null, /* the actual file name and full path */
   file_label varchar(255), /** user's memorable name for the file */
   description varchar(2500), /** user provided description of contents */
   media_type varchar(100), /** something like image/jpeg; privided by php in upload */
);

然后,您可能需要將image_id與某種分類或標簽,一個user_id等連接起來。

編輯

添加評論:

即使您願意,也可以始終使用真實文件名來構建鏈接,即使您將鏈接僅作為圖像ID存儲在文件系統中也是如此。 您只需要利用搜索友好的URL來執行類似的操作(其中1234是圖像ID,/ images /重定向到您的php腳本):

mysite.com/images/db/1234/picture_of_a_cat.jpg)

然后,您只需將/ images / db /重定向到您的php腳本即可。 或者,如果您不想嘗試重寫它們,則可以使用$ PATH_INFO。

例如,如果您擁有mysite.com/images/render.php/1234/picture_of_cat.jpg:

<?php
$parts = explode("/",$PATH_INFO);
$image_id = $parts[3];
$image_from_db = null; //fetch the row from your dabatase here!
header("Content-type: ".$image_from_db['media_type']);
echo file_get_contents($image_from_db['file_path']);

祝好運! ;)

好吧,我更喜歡在圖像名稱中使用哈希,因為如果有兩個相同名稱的圖像會發生這種情況,並且會產生將來的問題。

另一個提示,永遠不要將文件的內容存儲在數據庫中,其成本比僅存儲該文件的路徑要高得多。

將圖像存儲在數據庫中不是一個好主意,而是將指向圖像的鏈接存儲在數據庫中。 例如; 用以下字段創建表

  • image_id //圖像的唯一ID
  • image_type //圖片類型(“ png”,“ jpg”,“ gif” .....)
  • image_link //圖像所在文件夾的路徑
  • 上傳日期//圖片的上傳日期(用於數據庫查詢中的訂購全用)

您可以添加任何其他想要的字段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM