やること
画像ファイルから取得したバイト列から、フロントで読めるData URI
を生成します。
やり方
サンプルコードは以下の通りです。
import java.util.Base64
val bytes: ByteArray = // ファイルから取得したバイト列
val base64Bytes: ByteArray = Base64.getEncoder().encode(bytes) // Base64エンコード
val base64Utf8String = String(base64Bytes, Charsets.UTF_8) // UTF-8への変換
val mimeType: String = // 何らかの方法で取得したMIME Type
// Data URIの生成
val dataUri: String = "data:${mimeType};base64,${base64Utf8String}"
解説
Base64へのエンコード
Base64
へのエンコードは、Java8
以降ではjava.util.Base64
に定義されたエンコーダーを用いることでライブラリを導入せずに行えます。
ここにはベーシック、URL
、MIME
の3種類のエンコーダーが定義されていますが、サンプルの通りベーシックエンコーダーを用いなければフロントで適切に解釈できません。
文字列への変換
エンコード結果はバイト列なので、適切に文字列にしなければData URI
として扱えません。
MIME Typeの取得
サンプルコードではMIME Type
の取得方法を記載していませんが、特に考慮することが無ければ拡張子から推測するのがいいと思います。
Apache Tika
を用いることで厳密にMIME Type
を判定することも可能です。