2016-07-31 6 views
-2

私の現在のサイトでは、ユーザーファイルのアップロードが許可されているため、衝突を避けるために、保存されたファイル名を何らかの方法でエンコードする必要があります。しかし、私はダウンロードの元のファイル名を取得することができるようにしたいと思います。だから、私は今のようアップロードされたファイル名のエンコード

  • ユニーク
  • デコード可能な

するファイル名をエンコードしようとしている、私は次のコードを使用しようとしました:

$hash = $file->hashName(); 

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

をしかし、 base64_encodeは、特にファイル名がキリル文字などのユニコード文字を使用している場合は、256文字より長い文字列を生成します。だから、ファイル名をエンコードする他の方法はありますか?

+0

元のファイル名を保存しませんか? – revo

+1

元の名前をデータベースに保存できませんか? – PeeHaa

答えて

0

マッピングを行う方が簡単だと思います。ディスク上のファイルを保存するには、一意の名前を選択します。データベースでは、元のファイル名とファイル名でディスクにアップロードされたファイルを参照し、そのファイルをダウンロードしたいときはContent-Dispositionヘッダーに元のファイル名を設定します。

header('Content-Disposition: filename="originalFilename.pdf"'); 
関連する問題