Laravel

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

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

Laravel から S3 に画像を保存するときに metadata として任意のパラメーターを付与する方法についてまとめています。

環境

"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

このようになります。

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

おわりに

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

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