diff --git a/vfs.js b/vfs.js index 4fd563a..2cd6b79 100644 --- a/vfs.js +++ b/vfs.js @@ -179,6 +179,30 @@ let VFS = function() { return dataUrl; }; + this.dataURLToBlob = function(dataURL) { + // convert base64 to raw binary data held in a string + // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this + var byteString = atob(dataURL.split(',')[1]); + + // separate out the mime component + var mimeString = dataURL.split(',')[0].split(':')[1].split(';')[0] + + // write the bytes of the string to an ArrayBuffer + var ab = new ArrayBuffer(byteString.length); + + // create a view into the buffer + var ia = new Uint8Array(ab); + + // set the bytes of the buffer to the correct values + for (var i = 0; i < byteString.length; i++) { + ia[i] = byteString.charCodeAt(i); + } + + // write the ArrayBuffer to a blob, and you're done + var blob = new Blob([ab], {type: mimeString}); + return blob; + }; + function getTypeFromName(filename) { var parts = filename.split("."); if (parts.length < 2) { return null; }