Read file to blob and display in javascript

14,481

So incase anyone else stumbles upon this and finds it useful I was able to solve this with help from this stackoverflow article. The solution involves leaving readAsBinaryString as the file reading method. Create the Base64 string with btoa and then use b64toBlob function found in the mentioned stackoverflow article.

Here is the adjusted JSFiddle to show how I got it to work.

https://jsfiddle.net/ajwhiteway/vstj3bcm/1/

Share:
14,481
Ajwhiteway
Author by

Ajwhiteway

I'm a computational/theoretical physicist by training working as a Software Developer. I've used a variety of languages and am able to adapt to new language requirements. I've worked with Linux, Mac, and Windows developement and with Cluster Computing, MPI (~200 CPUs), Cuda, Cuda-MPI hybrid (4 CPUs, 4 GPUs). A wide range of modelling and simulation techniques in school. Professionally (starting in 2015) I've worked with ASP.NET, IIS, MSSQL, Analysis Services, ExtJS, Swift (iOS), and more. I enjoy challenging problems and like to help out when I can.

Updated on June 04, 2022

Comments

  • Ajwhiteway
    Ajwhiteway almost 2 years

    So I'm trying to create a basic prototype of a functionality. Essentially the end goal is to receive a Base64 encoded string and a support mime type and generate the file and serve it up from a HTML 5 APP. For now I'm working on simple getting a file, turning it into a Blob, and then displaying it, all from memory.

       var blobfile = atob(base64);
       window.blobFromBlob = new Blob([binaryString], {
         type: MIMEType
       });
       window.blobURL = URL.createObjectURL(window.blobFromBlob);
       var a = "<a href=\"" + window.blobURL + "\">Binary Blob Link</a>";
       document.getElementById('byte_content').innerHTML = a;
    

    I've created a JSFiddle to show what I'm having trouble with. When I put, say a JPEG, into it and then try to serve it up the img tags show corrupt images. The Base64 blob I never expect to work, but the Binary blob and blob from base 64 I do expect to work.

    Can anyone see where I'm going wrong?

    Thanks!

    NOTE: I managed to get the binary one to display by changing from readAsBinaryString to readAsArrayBuffer

    NOTE 2: I'm beginning to suspect it has something to do with atob and btoa