JSFiddle - React, Tailwind, and code Playground

by Jeremy Banks

JavaScript

var contentType = 'image/png';
var b64dData = 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';

var blob = b64toBlob(b64Data, contentType);
var blobUrl = URL.createObjectURL(blob);

window.location = blobUrl;

function b64toBlob(b64Data, contentType, sliceSize) {
    contentType = contentType || '';
    sliceSize = sliceSize || 1024;
    
    function charCodeFromCharacter(c) {
        return c.charCodeAt(0);
    }
    
    var byteCharacters = atob(b64Data);
    var byteArrays = [];
    
    for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        var slice = byteCharacters.slice(offset, offset + sliceSize);
        var byteNumbers = Array.prototype.map.call(
            slice, charCodeFromCharacter);
        var byteArray = new Uint8Array(byteNumbers, contentType);
        
        byteArrays.push(byteNumbers);
    }
    
    var blob = new Blob(byteArrays, {type: contentType});
    return blob;
}