CSVファイルを指定して、
アップデートする機能を実装するときに発生しました。
コントローラ側で$requestよりファイル名をgetRealPathメソッドにて取得してログを出力すると、
C:\xampp\tmp\php○○○○.tmp
になります。
Webを調べても、解決の糸口が見つからず色々試したところ、
とりあえず解決はできたの以下コードを紹介します。
開発環境
OS:Windows10 64bit
Webフレームワーク:Laravel Framework 5.7.27
VisualStudioCode 1.30.2
コード
resources\views\index.blade.php
<form role="form" method="post" action="importCsv" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="file" name="csv_file">
<button type="submit">保存</button>
</form>
routes/web.php
Route::get('/', function () {
return view('index');
});
Route::post('importCsv', 'CsvController@importCsv');
app\Http\Controllers\CsvController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CsvController extends Controller
{
public function importCsv(Request $request)
{
// 送信ファイル情報
$file = $request->file('csv_file');
// ファイル名取得
$importFileName = $file->getClientOriginalName();
// storageフォルダ以下にコピー
$move = $file->move(storage_path(). '/upload', $importFileName);
}
}
getRealPathメソッドではなくgetClientOriginalNameを使用すればファイル名(実体も含め)が取得できます。
動作
①パワーシェルより起動
php artisan serve --host 0.0.0.0
②ブラウザよりhttp://localhost:8000/にアクセスする
以下画面が表示される。
③ファイルを指定する
④保存ボタンを押す
⑤storage\upload以下に保存されているのを確認する
最後に
途中に記載しましたが、
getRealPathメソッドではなくgetClientOriginalNameを使用すればファイル名(実体も含め)が取得できます。
php○○○○.tmpは、おそらく一時ファイルのようです。