2013-07-02 50 views
0

我想在服務器上保存文件(主要是圖片和文檔),但我有一個困境:它應該如何命名? (每個文件將在數據庫記錄 - ID,標題,文件名,擴展名,創建,...)如何命名服務器上的文件?

  1. 我最初的想法是,這將通過ID命名(從DB - 每個名稱將是唯一的) ,但是當有人下載​​它時,它會有難看的名字(ID)
  2. 第二個想法是,它將按原始文件名命名,但不確定名稱是否是唯一的。所以每次我上傳一些東西時,我都必須檢查所有數據庫的重複名稱。
  3. 最後一個想法是將ID與名稱(fileName_ID)連接起來,因此它將是唯一的,但我對它並不滿意。

有沒有更好的解決方案?

感謝您的回答。米哈爾

回答

0

解決方案2:忘記它。這是不確定的。

解決方案3可以正常工作。

解決方案1沒問題。

您只需在用戶下載文件時更改文件名。

header('Content-Disposition: attachment; filename="'.getFileNameFromDB($file_id)); 
+0

大,這是正是我需要的!非常感謝你。 –

+0

當你只想在網頁上顯示它(在​​標籤),但沒有通過保存對話框窗口下載時,有沒有辦法將IDname轉換爲originalName? –

+0

您無權訪問「保存對話框」(瀏覽器行爲),因此您無法對其執行任何操作。否則,你有apache,mod_rewrite和.htaccess,但對於你想要的可能有點困難。你仍然可以嘗試。 – kmas

4

我最初的想法是,這將通過ID命名(從DB - 每個名稱將是唯一的)

這是正確的答案。

但當有人會下載它,它就會有醜陋的名稱(ID)

這就是爲什麼我們給它的Content-Disposition頭一個漂亮的名字。

0

還有另一個想法使用隨機數和出隨機數在文件名前

$random_digit=rand(0000,9999); 

$new_file_name=$random_digit.$file_name; 

,或使用你的最後的想法,當下載或顯示其重命名爲不進行身份

+0

我不喜歡這個隨機數的想法 - 有很小的可能性,你已經有相同的名字(在更大的文件計數)。 –

相關問題