LumenではLaravelと異なり「filesystem」がデフォルトでインストールされていません。
そのためLumenで「filesystem」を使用するためにはインストールして設定する必要があります。
今回はその導入手順をまとめました。
1. インストール
以下のコマンドで「flysystem」をインストールする。
composer require league/flysystem
2. 設定
- 「bootstrap/app.php」に以下のコードを追加する。
$app->singleton('filesystem', function ($app) {
return $app->loadComponent('filesystems', 'Illuminate\Filesystem\FilesystemServiceProvider', 'filesystem');
});
$app->configure('filesystems');
$app->register(Illuminate\Filesystem\FilesystemServiceProvider::class);
- 「config/filesystems.php」を作成し、以下のコードを追加する。
<?php
return [
'default' => env('FILESYSTEM_DISK', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'throw' => false,
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],
'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,
],
],
];
3. 保存方法
Lumenで使用する場合も、Laravelと同じように「Storage」
ファサードを使用することができます。
use Illuminate\Support\Facades\Storage;
public function fileUploadPost(?UploadedFile $upfile): \App\Models\ApiModels\FileUploadPostResult
{
$fileName = $upfile->getClientOriginalName();
Storage::disk("public")->putFileAs('', $upfile, $fileName);
}
以上でLumenで「filesystem」を使用する方法をまとめました。
4. 「Amazon S3」に保存する場合
Amazon S3に保存する場合はdiscを「s3」と切り替えるようになりますが、デフォルトではライブラリが足りないためエラーとなります。
そのため以下のライブラリをインストールしてください。
composer require league/flysystem-aws-s3-v3