Laravel5.6 で Base64エンコードされたファイルを AWS S3 にアップロードする
表題の通り、Laravel で Base64エンコードされたファイルを AWS S3 にアップロードする方法をまとめます。
PHPのフレームワーク、Laravelでは、お手軽にポストされたファイルデータを AWS S3 ストレージにアップロードして保存することが可能です。もし単純なファイルアップロードなら公式のページを見ると、よくわかります。
しかし、諸々の事情でBase64文字列のファイルをS3にアップロードする必要がありましたので、その方法を調べました。Base64でエンコードされたファイルについては、別途独自に処理してアップロードする必要があります。以下にその方法をまとめます。
サンプルデータ
"あいうえお" と書いてあるテキストファイルのBase64エンコードを例とします。
data:text/plain;base64,gqCCooKkgqaCqA==
このデータを AWS S3 に保存する方法を以下に記します。
Laravelサンプル実装
// サンプルデータ
$file_base64 = 'data:text/plain;base64,gqCCooKkgqaCqA==';
// Base64文字列をデコードしてバイナリに変換
list(, $fileData) = explode(';', $file_base64);
list(, $fileData) = explode(',', $fileData);
$fileData = base64_decode($fileData);
// ランダムなファイル名 + 拡張子
$fileName = str_random(40).'.txt';
// 保存するパスを決める
$path = 'mydata/'.$fileName;
// AWS S3 に保存する
Storage::disk('s3')->put($path, $fileData, 'public');
通常のアップロードと異なるのは、自分でファイル名を指定しなければならない点です。ここではランダムな40文字+拡張子としています。
拡張子も本当はBase64から判定しないとですが、とりあえず固定にしています。
後はS3のパスを決めて、put
関数でパスとアップロードするデータを投げると、ファイルがアップロードされます。
以上。
コメントを書く