LaravelのLivewireでCloudflare R2にファイルをアップロードする
このStorageの機能を使ってアップロードできます。S3であれば、簡単にアップロードできるようになっています。R2は基本的にS3と互換性がありますので、S3の機能を使ってアップロードすることができます。
File Storage - Laravel 11.x - The PHP Framework For Web Artisans
ライブラリのインストール
まず、下記をインストールしておきます。
composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependenciesconfig/filesystems.phpの修正
最初の状態だとfilesystems.phpは下記があります。
's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false,],s3と互換性があるので、上記のまま使ってもよいです。ですので、修正しないで使うことも可能です。 私は、メール送信などで別途AWSを使うケースがありますし、R2を使ってることを忘れる可能性もあるかなあと思ったので、s3を全体的にR2に変更しました。
'r2' => [ 'driver' => 's3', 'key' => env('R2_ACCESS_KEY_ID'), 'secret' => env('R2_SECRET_ACCESS_KEY'), 'region' => env('R2_DEFAULT_REGION'), 'bucket' => env('R2_BUCKET'), 'endpoint' => env('R2_ENDPOINT'), 'throw' => true,],Cloudflare R2でバケット作成
- バケットを作成します。
- 次にR2 APIトークンの管理をクリックして、APIトークンを作成します。
- アクセスキーIDと、シークレットアクセスキーと、エンドポイントをメモします。
- 作成したバケットの設定画面にある、「r2.devサブドメイン」に記載されている、「パブリック r2.dev バケットURL」をメモします。
ただ、r2.devサブドメインは本番環境での利用は非推奨です。
r2.dev アクセスを有効にすると、インターネット上の誰でもパブリック r2.dev URL を使用して、このバケット内のオブジェクトを表示できます。ただし、利用にはレート制限があり、本番環境にはお勧めできません。また、Cloudflare の 機能である Access や Cache は利用できなくなります。
.envの設定
R2_ACCESS_KEY_ID={アクセスキーID}R2_SECRET_ACCESS_KEY={シークレットアクセスキー}R2_DEFAULT_REGION='apac'R2_BUCKET={バケット名}R2_USE_PATH_STYLE_ENDPOINT=falseR2_ENDPOINT={エンドポイント}R2_PUBLIC_URL={パブリック r2.dev バケットURL}Livewireでアップロードする
https://livewire.laravel.com/docs/uploads — livewire.laravel.com