LoginSignup
18
22

More than 5 years have passed since last update.

Javaでdata URI (base64) を作る方法

Posted at

Javaでファイルからdata URIを生成する方法のメモです

data URIとは

data URIとはメディアデータなどをbase64エンコードしたもので、以下のようなやつです

data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28y・・・・==

HTMLでは、

<image src="data:image/png;base64,AAAAIGZ0eXBpc29tAAAC・・・">

<video src="data:video/mp4;base64,AAAAIGZ0eXBpc29tAAAC・・・">

のようにsrc指定することが可能です。

1.ファイルの種類をあらわす MIMEタイプ を調べる

ファイルのMIMEタイプを調べる。

File file = new File("movie.mp4");

String contentType = Files.probeContentType(file.toPath());

2.ファイルの中身をbyte[]配列にすべて読み込む

byte[] data = Files.readAllBytes(file.toPath());

3.byte[]配列をbase64にエンコードする

  • Java7のアプローチ
 String base64str = DatatypeConverter.printBase64Binary(data);
  • Java8のアプローチ
 String base64str = Base64.getEncoder().encodeToString(data);

4.data URI書式にする

以下の書式にする

data:[<MIME-type>][;charset=<encoding>][;base64],<data>
StringBuilder sb = new StringBuilder();
sb.append("data:");
sb.append(contentType);
sb.append(";base64,");
sb.append(base64str);

ソースコード全文

ToDataURI.java
package org.example;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

import javax.xml.bind.DatatypeConverter;

public class ToDataURI {

    public static void main(String[] args) throws IOException {

        // 変換元のファイル
        File file = new File("movie.mp4");

        // ファイルのコンテンツタイプをしらべる
        String contentType = Files.probeContentType(file.toPath());

        // ファイル内容をbyte[]に読み込む
        byte[] data = Files.readAllBytes(file.toPath());

        // byte[]をbase64文字列に変換する(java7)
        String base64str = DatatypeConverter.printBase64Binary(data);

        // byte[]をbase64文字列に変換する(java8)
        // String base64str = Base64.getEncoder().encodeToString(data);

        // data URIを作る
        StringBuilder sb = new StringBuilder();
        sb.append("data:");
        sb.append(contentType);
        sb.append(";base64,");
        sb.append(base64str);

        // 結果を表示
        System.out.println(sb.toString());

    }
}

実行すると、data URIできあがり

data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wN・・・以下略
18
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
22