EN
Java - InputStream to Base64 Data URL
7
points
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 fromInputStream
, - 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);
}
}