サーチ…
パラメーター
パラメータ/関数 | 説明 |
---|---|
ファイルアップロード | ファイル<input> フィールドの名前 |
$ sampleName | 動的に生成される文字列、またはユーザーがアップロードしたファイルの名前 |
app_path() | アプリケーションへの絶対パスを提供するためのLaravelヘルパーです |
getCLientOriginalExtension() | ユーザーがアップロードしたファイルの拡張子を取得するためのLaravelラッパー |
ユーザーがアップロードしたファイルのタイムスタンプ付きファイル名を生成します。
以下は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
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow