たけるのプログラミング

作ったものとか、気ままにアップします。

【Laravel】ファイルアップロード1人勉強会【PHP】

readouble.com
を参考にした。

まずpublic/storage と storage/app/public 間においてシンボリックリンクを貼るために以下のArtisanコマンドを実行しておく。

php artisan storage:link

以下のような画像をアップロードするbladeを用意する。

<form action="/upload" enctype="multipart/form-data" method="post">
    @csrf
    <input type="file" name="img">
    <input type="submit" value="アップロードする">
</form>

ルーティング

Route::post('upload','ImgTestController@store');

①putを使うパターン

https://laravel.com/api/6.x/Illuminate/Support/Facades/Storage.html#method_put

ソースは色々省略しています。アップロードしたファイルはstorage/app/public/imgに保存される。

use Illuminate\Support\Facades\Storage;

$contents = $request->file('img');
Storage::put('public/img', $contents);

②putFileを使うパターン

https://laravel.com/api/6.x/Illuminate/Support/Facades/Storage.html#method_putFile

ソースは色々省略しています。アップロードしたファイルはstorage/app/public/imgに保存される。

use Illuminate\Support\Facades\Storage;

$contents = $request->file('img');
Storage::putFile('public/img',$contents);

③putFileAsを使うパターン

https://laravel.com/api/6.x/Illuminate/Support/Facades/Storage.html#method_putFileAs

ソースは色々省略しています。アップロードしたファイルはstorage/app/public/imgに画像の元の名前で保存される。
getClientOriginalName()を使い、名前を取得。
ちなみにファイルの拡張子について知りたい場合は、extension()メソッドを使う。

use Illuminate\Support\Facades\Storage;

$contents = $request->file('img');
Storage::putFileAs('public/img', $contents, $contents->getClientOriginalName());


上の①〜③ではStorageファサードを使った。以下ではIlluminate\Http\UploadedFileのメソッドを使用する。

④storeを使うパターン

https://laravel.com/api/6.x/Illuminate/Http/UploadedFile.html#method_store

アップロードしたファイルはstorage/app/public/imgに保存される。

$request->file('img')->store('public/img');

⑤storeAsを使うパターン

https://laravel.com/api/6.x/Illuminate/Http/UploadedFile.html#method_storeAs

アップロードしたファイルはstorage/app/public/imgに画像の元の名前で保存される。

$request->file('img')->storeAs('public/img',$request->file('img')->getClientOriginalName());