Closed2
【コピペ用】base64 で受け取った画像を Storage ファサードで保存
たまによく必要になるのでコピペ用として.
function storeBase64Image(string $context): string
{
// base64 の形式に則って文字列を分割
[, $split] = explode(';', $context, 2) + [1 => ''];
[, $split] = explode(',', $split, 2) + [1 => ''];
// デコード
$fileData = base64_decode($split, true);
// base64 形式でなければエラー
if ($fileData === false) {
throw new \RuntimeException("dataURIの形式が正しくありません");
}
// ファイルタイプを取得
$finfo = finfo_open(FILEINFO_MIME_TYPE);
// finfo_open が resource|false を返すが,finfo_buffer が resource を期待するため明示的にチェック
assert(is_resource($finfo));
$fileType = finfo_buffer($finfo, $fileData);
// 拡張子を決める
$extension = match ($fileType) {
'image/png' => 'png',
'image/jpeg' => 'jpg',
// png か jpeg でなければエラー
default => throw new \RuntimeException("画像ファイルは png か jpg にしてください"),
};
// 画像を一意に決めるために uuid を使う
$uuid = Str::uuid();
// S3 に画像をアップロード
Storage::put(
path: $path = "images/{$uuid}.{$extension}",
contents: $fileData,
options: 'private',
);
return $path;
}
このスクラップは2023/01/20にクローズされました