2016-07-31 94 views
-2

Meine aktuelle Seite ermöglicht das Hochladen von Benutzerdateien. Um Kollisionen zu vermeiden, muss ich die gespeicherten Dateinamen in irgendeiner Weise verschlüsseln. Aber ich würde gerne in der Lage sein, originale Dateinamen für Downloads zu erhalten. Also, ich versuche, die Dateinamen zu kodierenCodierung der hochgeladenen Dateiname

  • einzigartigen
  • decodierbaren

Ab sofort zu sein, ich habe versucht, folgenden Code zu verwenden:

$hash = $file->hashName(); 

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

Aber base64_encode erzeugt länger als 256 Zeichenfolgen, besonders wenn der Dateiname Unicode-Zeichen (wie kyrillisch) verwendet. Gibt es eine andere Möglichkeit, Dateinamen zu kodieren?

+0

Möchten Sie nicht die ursprünglichen Dateinamen speichern? – revo

+1

Können Sie nicht einfach die ursprünglichen Namen in der Datenbank speichern? – PeeHaa

Antwort

0

Ich denke, es wäre einfacher, Mapping zu tun. Zum Speichern von Dateien auf der Festplatte wählen Sie einen eindeutigen Namen. In der Datenbank wird über die hochgeladene Datei mit dem ursprünglichen Dateinamen und dem Dateinamen auf der Festplatte informiert, und wenn jemand diese Datei herunterladen möchte, wird der ursprüngliche Dateiname im Content-Disposition-Header festgelegt.

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