🐟
【Go】DataURLで埋めたいな
はじめに
何かしらの画像をユーザーにメールで送る場面は度々あると思います。
初めは、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にエンコードするときに使用したパッケージは以下です。よく使われると思います。
あとは、以下のように書くなどして画像を表示させることができます。
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVYAAAFWCAIAAA...(続く)" />
終わりに
ではまた!
Discussion