我想創建一個網站,我需要存儲一些用戶上傳的文件(如一些配置文件圖像,一些XML文件等)。在網站上存儲用戶上傳文件的最佳方式是什麼?
那麼存儲這些文件的最佳方式是什麼?
目前,我在服務器上爲每個註冊的新用戶創建一個新目錄,並將每個用戶的文件存儲在各自的目錄中,但有人告訴我這不是最好的方法。
那麼,如何存儲這些文件?是否我創建了一個公共目錄&根據用戶標識或與用戶相關的內容命名文件或者不斷爲每個用戶創建一個新目錄?
我想創建一個網站,我需要存儲一些用戶上傳的文件(如一些配置文件圖像,一些XML文件等)。在網站上存儲用戶上傳文件的最佳方式是什麼?
那麼存儲這些文件的最佳方式是什麼?
目前,我在服務器上爲每個註冊的新用戶創建一個新目錄,並將每個用戶的文件存儲在各自的目錄中,但有人告訴我這不是最好的方法。
那麼,如何存儲這些文件?是否我創建了一個公共目錄&根據用戶標識或與用戶相關的內容命名文件或者不斷爲每個用戶創建一個新目錄?
一個可行的解決方案將取決於您的要求,例如,你有多少用戶期待。每個用戶一個目錄的解決方案很快就會遇到一些文件系統限制(對於ext3,一個目錄中的最大子目錄數固定爲32000)。
每用戶一個文件應該可以很長時間(請參閱:How many files in a directory is too many?)。最後,如果您的用戶基數增加,您可以使用固定數量的分片(例如基於用戶標識)來限制每個目錄的目錄數和文件數(例如,請參見how git stores its objects in loose format)。
謝謝。這回答了我在我心中的很多事情! – ptamzz
那麼你有幾個選擇。
最好的方法將取決於您的應用程序,時間範圍和您的經驗。選項1可能是最簡單的。選項2可能是最靈活的。如果選項3滿足您的文檔需求,選項3可能是最佳選擇。
我不確定Redis是否專門存儲文檔--Redis主要是一個關鍵:價值存儲。當NoSQL數據庫討論中使用術語「文檔」時,人們通常指的是數據對象,而不是XML文件。然後,我再也沒有聽說過將文件的二進制數據存儲在數據庫中,所以我認爲這是可能的。 – Matt
這是我的Redis存儲文檔的源代碼。 http://images.infoworld.com/d/data-explosion/no-sql-new-databases-new-applications-400?page=0,3我承認我從未使用過。我已將文件存儲在數據庫中。在PHP中,您使用BLOB字段並使用pack()來轉換字符串二進制。我還使用了一種非常類似GIT的方法,我使用userid,將其填充到0000003450,然後創建目錄:/ 00/00/00/34/50/ –
他們解釋了他們的擔憂嗎?我擔心如果其他人能夠訪問他們知道位置的上傳信息b/c。如果目錄是/ protected/user /,並且只能通過PHP來訪問信息,這可以解決我唯一的問題。 – Wayne
這確實是一個大問題,但現在,用戶上傳的文件與我的應用程序可以公開,所以我現在不需要擔心這些。 – ptamzz