🐟

【Go】DataURLで埋めたいな

2022/08/20に公開

はじめに

何かしらの画像をユーザーにメールで送る場面は度々あると思います。
初めは、S3にアップロードして、メール本文のURLを踏んでもらうなり、imgタグで直接埋め込んで表示するなりを想定していましたが、アクセス許可の範囲などのセキュリティー上の問題や、フロントエンドや外部APIとの連携上の問題により、そのような方法では、なかなか実現し難いと考えました。

そこで、今回はDataURLに変換することにしました。

本題

URLとつくので、DataURLはURLです。すみません。馬鹿っぽい日本語になっちゃいました。
皆さまがよく目にする、

https://~

といったURLの「https」の部分はスキーマと呼ばれます。
この部分がDataURLでは「data」と表し、データそのものを文書に直接埋め込むことができます。

以下のようなフォーマットで表されます。

data:[<mediatype>][;base64],<data>

例えば、PNG形式の画像データを表したい場合は以下のようになります。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVYAAAFWCAIAAA...(続く)

ここで<data>には画像や音声などのデータをbase64エンコードしたものが入ります。

Goで実現しようとすると例えば以下のようになります。

// dataURLに変換
str := base64.StdEncoding.EncodeToString(ここには画像などのバイトスライスが入ります)
dataURL := fmt.Sprintf("data:image/png;base64,%s", str)

base64にエンコードするときに使用したパッケージは以下です。よく使われると思います。
https://pkg.go.dev/encoding/base64

あとは、以下のように書くなどして画像を表示させることができます。

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVYAAAFWCAIAAA...(続く)" />

終わりに

ではまた!

Discussion