2010-12-05 66 views
2

我想知道什麼是最好的文件夾結構的Web應用程序來保存用戶圖片,如果他們有不同的用戶名和不同的相冊。我使用亞馬遜S3,文件夾和水桶圖像文件結構和編碼文件名。 like Facebook image Url

我不希望人們能夠預測用戶/相冊中的URL喜歡FB

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1189.snc/154140_10150322456245277_731310276_15908482_4918209_n.jpg

而且作爲文件名。什麼是最好的類型的信息編碼來改變文件名。 (用戶名,日期/時間,用戶ID) E.g.

原文: apple.jpg

編碼: 1263547483_56783929_3934736_943883.jpg

你會用什麼來編碼這些網址安全的文件名? Base64,MessageDigests?

回答

1

我會創建「隨機」文件名。這些文件可以保存在一個目錄中,也可以保存在生成​​的目錄結構中,如dir01,dir02,dir03。單獨的目錄對於大量的文件來說更好。我認爲你不應該在一個目錄中存儲10K以上的文件。如果您有更多的文件,每次計數器到達10K時都會創建新的目錄。

包含文件系統中物理路徑的文件的所有元數據都應存儲在數據庫中。 Files表可能包含用戶表的外鍵,因此您始終可以知道該文件的所有者。

這種設計是可擴展的:將來您可以在不同的磁盤上存儲不同的目錄,甚至可以使用CDN系統。這足夠安全。不可能猜到你如何將文件元數據編碼到文件名中,因爲你不編碼任何東西:你只需要創建隨機名。這很簡單,&強大。所有數據均以數據庫形式存在,因此您可以在將來添加新功能並在數據庫中的舊數據上運行它們。

1

使用ex Base64進行編碼看起來不太好。我會簡單地用GUID替換文件名,並在數據庫中有一個映射文件和GUID的映射。

喜歡的東西:

http://photos.site.com/{account-id}/{gallery-id}/{image-guid}.jpg 

這將導致:

http://photos.site.com/23323/323/F66A80B2_007F_11E0_86C8_322ADFD72085.jpg