為使用者上載的檔案生成帶時間戳的檔名
以下將無法在 Windows 計算機上執行
$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);
它會丟擲一個錯誤,例如“無法將檔案移動到/ path …”
為什麼? - 這在 Ubuntu 伺服器上完美執行
原因是在 Windows 上,colon ':'
不允許在 linux 上允許的檔名中。這是一個很小的事情,我們可能不會提前注意到它並不斷想知道為什麼在 Ubuntu(Linux)
上執行良好的程式碼不起作用?
我們的第一個預感是檢查檔案許可權和類似的東西,但我們可能不會注意到 colon ':'
是這裡的罪魁禍首。
因此,為了在 Windows 上上傳檔案,請不要在生成帶時間戳的檔名時使用 colon':'
,而是執行以下操作:
$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