簡體   English   中英

將圖像存儲在目錄中,並存儲對數據庫中圖像的引用

[英]Store images in directories and store a reference to the images in the database

我目前正參與一個項目,旨在創建一個網站,允許用戶分享和評價圖像,用於他們的創意媒體課程。

我試圖找到將圖像保存到mysql數據庫的方法。 我知道我可以將圖像保存為blob,但這不會起作用,因為我計划只允許用戶保存高分辨率圖像。 因此,我試圖找出如何將圖像存儲在目錄/服務器文件夾中,並存儲對數據庫中圖像的引用。 更重要的是,引用必須自動保存在mysql數據庫表中。

有誰知道如何去做? 還是指出我正確的方向?

謝謝!

我實際上已經建立了一個類似的網站(海量圖像上傳器),所以我可以從經驗中說出來。

跟蹤文件

將映像文件按原樣保存在磁盤上,並將路徑保存到數據庫中的文件中。 這部分應該非常簡單。

一個缺點是您需要為每個圖像查找數據庫,但如果您的表經過優化(索引),這應該不是真正的問題。

有許多優點,例如您的文件易於引用,您可以將元數據添加到文件中(如視圖數量)。

文件名

現在,保存文件,大量文件並不是立竿見影的。

如果您根本不關心文件名,只需生成一個隨機哈希,如:

$filename = md5(uniqid()); // generate a random hash, mileage may vary

這可以解決所有類型的文件名相關問題,如重復文件名,不支持的字符等。

如果要保留文件名,請將文件名存儲在數據庫中。

如果你希望你的磁盤上的文件名也有點人類可讀,我會采用混合方法:部分哈希,部分原始文件名。 您需要過濾不支持的字符(例如/ ),或者可能音譯相似的字符(例如é -> eß -> ss )。 中文和希伯來文等外語可以給出有趣的結果,所以要注意這一點。 您還可以編碼任何外來字符(如base64_encode),但這對可讀性沒有太大作用。

最后,請注意文件路徑長度限制。 文件名和文件路徑不能無限長。 我相信Windows的完整路徑是255。

水桶

你肯定應該考慮使用存儲桶,因為操作系統(和人類)不喜歡包含數千個文件的文件夾。

如果你正在使用哈希,你已經有了一個方便的桶方案。

如果你的哈希是0aa1ea9a5a04b78d4581dd6d17742627

您的桶可以是: 0/a/a/1/e/a9a5a04b78d4581dd6d17742627 在這種情況下,有5個嵌套桶。 這意味着在16 ^ 5(~1百萬)個文件之后,你可以期望在每個桶中有一個文件。 您需要多少級別的存儲桶取決於您。

MIME類型

跟蹤原始文件擴展名/ mime-type也很好。 如果你只有一種mime類型(如TIFF),那么你不必擔心它。 大多數文件都有一些方法可以輕松檢測到它是該格式的文件,但您不必依賴它。 PNG以PNG開頭(使用文本編輯器打開它以查看它)。

相對路徑與絕對路徑

我還建議保存文件的相對路徑,而不是絕對路徑。 這使維護更容易。

所以保存:

0/a/a/1/e/a9a5a04b78d4581dd6d17742627

代替:

/var/www/wwwdata/images/0/a/a/1/e/a9a5a04b78d4581dd6d17742627

暫無
暫無

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

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