[Laravel] Base64 で AWS S3 にファイルアップロードする方法

[Laravel] Base64 で AWS S3 にファイルアップロードする方法

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 関数でパスとアップロードするデータを投げると、ファイルがアップロードされます。

以上。

PHPカテゴリの最新記事