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());