ホーム
Sponserd by↑転職したい人向け、ベンチャー企業の採用動画があります

【Laravel+S3】保存時にユーザー定義のmetadataを保存する方法

タイトルの通りです。

前提条件として、S 3へのファイルアップロードは成功している前提といます。

composer.json

"league/flysystem-aws-s3-v3": "~1.0",

結論から

use Storage;

classTestController extends Controller
{
    public function store(Request $request)
    {
        $disk = Storage::disk('s3');
        $params = [
            'visibility' => 'public',
            'Metadata' => [
                'x-amz-meta-post_id' => '1'
            ]
        ];  
        $path = $disk->put('test',$request->file('movie'),$params);
        return response()->json(['url'=>$path],200);
    }
}

put を使って、第三引数でパラメータを送るようにします。

そのとき、

        $params = [
            'visibility' => 'public',
            'Metadata' => [
                'x-amz-meta-post_id' => '1'
            ]         
        ]; 

x-amz-meta-

このプリフィックスから始まるように指定します。

これはお作法として、決まり文句であるようです。

管理画面から手動で入力しようとすると、

image36

このようになります。

また、公式のドキュメントにもこのように書いてあります。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/add-object-metadata.html#add-object-metadata-user-defined

おわりに

知っていれば大したことはないのですが、正解を引くのに数時間かかったので参考になればと思います。

次回は、Lambda でこのメタデータ使って RDS に保存するみたいなことをします(記事するかは不明)