2011-09-03 135 views
0

我正在編寫一個簡單的圖像託管服務,其中每個圖像及其所有縮略圖只能通過其名稱提供,例如, i.example.com/ XXXXX.jpg。這樣做的問題是,每個圖像和每個縮略圖必須位於一個可能快速增長的目錄中(i.example.com的文檔根目錄)。我寧願每個圖像都在每個用戶的單獨文件夾中。將通用URL路徑映射到特定文件

由於我無法確定哪個圖像屬於單獨URL中的哪個用戶,我以爲我需要編寫自己的腳本來爲用戶查詢數據庫,而不是爲圖像提供服務。這個問題將是大量的數據庫查詢。在我的網站上,我有一個一次顯示60張圖像的圖庫,這爲每個訪問者請求圖庫中的頁面提供了60個查詢。

我可以使用memcached,但除非將每個數據庫查詢結果保存到一個數組中,否則這隻會用60個memcached查詢替換60個數據庫查詢。

這一切對我來說似乎都不是最理想的,所以我想知道是否有更好的解決方案,或者我應該把每個圖像放到一個目錄中?

回答

3

您可以使用第一個字母,然後第二個等等來根據名稱對圖像進行分區。例如,圖像dog.jpg將被存儲在/path/to/images/d/o/dog.jpgcat.jpg/path/to/images/c/a/cat.jpg。您的網絡應用程序需要進行路徑轉換,但不需要點擊數據庫。如果兩個人上傳具有相同名稱的圖像,則會出現問題。

+0

每張圖片上傳後都會重新命名爲一個唯一的隨機字符串,所以這對我的系統來說效果會很好。我喜歡這個主意,謝謝! – Steffen

0

如果您希望在不同的人上傳同名圖像時區分圖像,則不能將所有圖像放在一個目錄中。當您想要上傳圖片並確保屬於某個特定人員的所有圖片不斷進入個人目錄時,您必須使用諸如www.example.com/images/user_id/xxxxxxx.jpg之類的內容;並且您必須確保所有用戶都登錄以提供他們的目錄標識;這樣,無論您是否訪問數據庫,user_id目錄都會爲不同的人保留不同的身份。示例:具有user_id = 231的用戶將擁有www.example.com/images/231/xxxxxx1.jpg(或www.example.com/images/portrait_231/xxxxxx1.jpg),如果您作爲開發人員想要創建更多比每個用戶的一個子目錄)。如果你仍然不明白我的意思,請給我發電子郵件@ [email protected]:我一直在研究圖像超過一年了!

+0

好吧,我的觀點是我不希望用戶的ID在URL路徑中,我希望網址短而且匿名。 – Steffen