ボス級社内SEのお役立ち技術情報

社内SEのシステム開発について。メインプログラム言語C#

【Laravel5.7】$request->file('file')->getRealPathメソッドで取得したファイル名が「C:\xampp\tmp\php○○○○.tmp」になる

f:id:HLSE:20190220191746p:plain

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/にアクセスする

以下画面が表示される。

f:id:HLSE:20190220204338j:plain

③ファイルを指定する

f:id:HLSE:20190220204618j:plain

 

④保存ボタンを押す

f:id:HLSE:20190220204738j:plain

⑤storage\upload以下に保存されているのを確認する

f:id:HLSE:20190220204907j:plain

 

最後に

途中に記載しましたが、

getRealPathメソッドではなくgetClientOriginalNameを使用すればファイル名(実体も含め)が取得できます。

php○○○○.tmpは、おそらく一時ファイルのようです。