Laravel

[Lumen]「filesystem」を使用してファイルを保存する

LumenではLaravelと異なり「filesystem」がデフォルトでインストールされていません。
そのためLumenで「filesystem」を使用するためにはインストールして設定する必要があります。
今回はその導入手順をまとめました。

1. インストール

以下のコマンドで「flysystem」をインストールする。

composer require league/flysystem

2. 設定

  1. 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);
  1. 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