Suche…
Parameter
Param / Funktion | Beschreibung |
---|---|
Datei-Upload | Name der Datei <input> |
$ sampleName | könnte auch eine dynamisch generierte Zeichenfolge oder der Name der vom Benutzer hochgeladenen Datei sein |
app_path () | ist der Laravel-Helfer, um den absoluten Pfad zur Anwendung anzugeben |
getCLientOriginalExtension () | Laravel-Wrapper, um die Erweiterung der vom Benutzer hochgeladenen Datei wie auf dem Benutzercomputer abzurufen |
Zeitstempel-Dateinamen für von Benutzern hochgeladene Dateien generieren.
Unten funktioniert auf einem Windows-Computer nicht
$file = $request->file('file_upload');
$sampleName = 'UserUpload';
$destination = app_path() . '/myStorage/';
$fileName = $sampleName . '-' . date('Y-m-d-H:i:s') . '.' .
$file->getClientOriginalExtension();
$file->move($destination, $fileName);
Es wird ein Fehler wie "Datei konnte nicht nach / Pfad ... verschoben werden" ausgegeben.
Warum? - Dies funktioniert perfekt auf einem Ubuntu-Server
Der Grund ist, dass unter Windows der colon ':'
in einem Dateinamen nicht zulässig ist, während dies unter Linux zulässig ist. Dies ist eine so kleine Sache, dass wir es vielleicht nicht im Voraus bemerken und sich immer wieder fragen, warum ein Code, der unter Ubuntu (Linux) gut läuft, nicht funktioniert?
Unsere erste Vermutung wäre, die Dateiberechtigungen und ähnliches zu überprüfen, aber wir bemerken vielleicht nicht, dass der colon ':'
hier der Täter ist.
Um Dateien unter Windows hochzuladen, verwenden Sie keinen colon':'
während Sie mit einem Zeitstempel versehene Dateinamen generieren. Gehen Sie stattdessen wie folgt vor:
$filename = $sampleName . '-' . date('Y-m-d-H_i_s') . '.' . $file->getClientOriginalExtension(); //ex output UserUpload-2016-02-18-11_25_43.xlsx
OR
$filename = $sampleName . '-' .date('Y-m-d H i s') . '.' . $file->getClientOriginalExtension(); //ex output UserUpload-2016-02-18 11 25 43.xlsx
OR
$filename = $sampleName . '-'.date('Y-m-d_g-i-A').'.' . $file->getClientOriginalExtension(); //ex output UserUpload-2016-02-18_11-25-AM.xlsx