2016-07-31 58 views
-2

我的當前網站允許用戶上傳文件,以避免碰撞,我需要以某種方式編碼存儲的文件名。但我希望能夠檢索下載的原始文件名。所以,我試圖編碼文件名是編碼上傳的文件名

  • 獨特
  • 解碼

截至目前,我已經嘗試使用下面的代碼:

$hash = $file->hashName(); 

    $fileName = base64_encode(json_encode([ 
     'hash' => $hash, 
     'name' => $file->getClientOriginalName() 
    ]));  
    return $fileName; 

base64_encode會產生超過256個符號的字符串,特別是當文件名使用Unicode字符(如西裏爾字母)時。那麼,有沒有其他的方法來編碼文件名?

+0

難道你不喜歡存儲原始文件名嗎? – revo

+1

難道你不能將原始名稱存儲在數據庫中嗎? – PeeHaa

回答

0

我認爲它會更簡單的做映射。爲了將文件保存在磁盤上,請選擇一些獨特的名稱在數據庫中,您保留有關上傳文件的原始文件名和文件名的信息,當有人想要下載該文件時,您在Content-Disposition標題中設置原始文件名。

header('Content-Disposition: filename="originalFilename.pdf"');