Languages
[Edit]
EN

Java - InputStream to Base64 Data URL

7 points
Created by:
Brian-Tompset
491

In this article, we would like to show how to convert InputStream to Base64 Data URL in Java.

Summary:

InputStream inputStream = ...

String mediaType = "image/png";
String dataUrl = Base64Utils.encodeDataUrl(mediaType, inputStream);  // to find utils check the next section in the article

Example dataUrl value:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAb8...

 

Reusable code example

The main idea of the below solution is:

  • use ByteArrayOutputStream to store read data from InputStream,
  • wrap ByteArrayOutputStream as Base64 encoded stream,
  • write bytes to Base64 encoded stream,
  • extract data from ByteArrayOutputStream as Data URL encoded with Base64.

Program.java file:

package com.dirask.examples;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Program {

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

        File imageFile = new File("/path/to/image.png");
        String imageType = "image/png";
        long imageSize = imageFile.length();

        try (FileInputStream imageStream = new FileInputStream(imageFile)) {
            String imageDataUrl = Base64Utils.encodeDataUrl(imageType, (int)imageSize, imageStream);
            System.out.println(imageDataUrl);
        }
    }
}

Example output:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAb8...

 

Base64Utils.java file:

package com.dirask.examples;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64Utils {

    private static Base64.Encoder BASE64_ENCODER = Base64.getEncoder();

    private Base64Utils() {
        // Nothing here ...
    }

    private static void writeMetadata(String mediaType, Writer outputWriter) throws IOException {
        outputWriter.write("data:");
        outputWriter.write(mediaType);
        outputWriter.write(";base64,");
        outputWriter.flush();
    }

    private static void writeContent(InputStream inputStream, OutputStream outputStream) throws IOException {
        byte[] buffer = new byte[1024];
        while (true) {
            int count = inputStream.read(buffer, 0, buffer.length);
            if (count == -1) {
				break;
			}
            outputStream.write(buffer, 0, count);
        }
        outputStream.flush();
    }

    public static String encodeDataUrl(String mediaType, int inputSize, InputStream inputStream) throws IOException {
        try (ByteArrayOutputStream rawOutputStream = new ByteArrayOutputStream(inputSize);
             OutputStreamWriter utf8OutputWriter = new OutputStreamWriter(rawOutputStream, StandardCharsets.UTF_8);
             OutputStream base64OutputStream = BASE64_ENCODER.wrap(rawOutputStream))
		{
            writeMetadata(mediaType, utf8OutputWriter);
            writeContent(inputStream, base64OutputStream);
            return rawOutputStream.toString();
        }
    }

    public static String encodeDataUrl(String mediaType, InputStream inputStream) throws IOException {
        return encodeDataUrl(mediaType, 1024, inputStream);
    }
}

 

Donate to Dirask
Our content is created by volunteers - like Wikipedia. If you think, the things we do are good, donate us. Thanks!
Join to our subscribers to be up to date with content, news and offers.
Native Advertising
🚀
Get your tech brand or product in front of software developers.
For more information Contact us
Dirask - we help you to
solve coding problems.
Ask question.

❤️💻 🙂

Join