やること
画像ファイルから取得したバイト列から、フロントで読める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を判定することも可能です。