Search code examples
javascriptjquery

Convert blob to base64


This is a snippet for the code that I want to do Blob to Base64 string:

This commented part works and when the URL generated by this is set to img src it displays the image:

var blob = items[i].getAsFile();
//var URLObj = window.URL || window.webkitURL;
//var source = URLObj.createObjectURL(blob);
//console.log("image source=" + source);
                        
var reader = new FileReader();
reader.onload = function(event){
console.log(event.target.result)
}; // data url!
var source = reader.readAsBinaryString(blob);

The problem is with the lower code, the source variable generated is null

Update:

Is there an easier way to do this with JQuery to be able to create Base64 String from the Blob file as in the code above?


Solution

  • var reader = new FileReader();
    reader.readAsDataURL(blob); 
    reader.onloadend = function() {
      var base64data = reader.result;                
      console.log(base64data);
    }
    

    Form the docs readAsDataURL encodes to base64

    As an awaitable function:

    function blobToBase64(blob) {
      return new Promise((resolve, _) => {
        const reader = new FileReader();
        reader.onloadend = () => resolve(reader.result);
        reader.readAsDataURL(blob);
      });
    }
    

    Note: The blob's result cannot be directly decoded as Base64 without first removing the Data-URL declaration preceding the Base64-encoded data. To retrieve only the Base64 encoded string, first remove data:/;base64, from the result.