Last active
June 30, 2022 14:15
-
-
Save akarsh1995/10e4fdc7451c88a71835368864af3b8c to your computer and use it in GitHub Desktop.
Convert base64 data-url to javascript File object
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // to quickly try the script open | |
| // https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgJICE4GcIDYAsAInGHMgN4BQyyAtsLRACoCeADhAFzJZhSgBzADTVkMYABsIIOI269+IYaIgAPSCCzAA9iHl9BImgCMCAExJx9igZQC+lSjACuIBGB0hkAfWPY8+EzaAIJQUHAs6M4wMNAAFH44BNaCAJQUogBucFDIxqA5LN4KgsgAvMgk2sYJ-gSpANxZOchSXhX5MlBFJUoAdG0CYAAWTTTZucYskFjlyCAQAO7IAKqgYAAcoeEscW2NojDauXETyMBzAAwN58gAPK3SN8AA1C-pVDQm0xBYANrAAC6c06hWKBn6CGGOQAwtozBBgmA4sADjQHDQoBAwM4oF4pjMmg5HAgJNhZpgkvgAMoQgQZGgWUjcDB1IiWUS+ZI8OmOGgIXQKZzuY61Km0mwpJQfUQ0EbALB9Ln4EFsiWCMZfeWKplkCrIbVKhFC9y4iBxNHIYk0bzGvjCnFYi0Mr4CzRgZACKDaZxsWYVBbLABKEAEAFFVGw4gB6OIAfk4us4cT6ACo441UvHOGmGqlU9mZIwyinU6kADp9UsZvPZ3P5xIBISl1LR1J9NQQBBxQ3Ky38wUev7eIR0BjMdgQUfiNqyKfINQaLS6UemfC64EVL0+v2azHY3FechjxisDjTyTSOfcBEChErIOoOG0Ni6aTImdXxipUeL6TLkBV3MSwrVEa1PWxKIYniVJuDWcAtjCCIXX3R0vF8Nkgm2CIoNiKAe2GBU+l1Po111VIwL5CCwHQCRqgtbhaOqFDkCxND5iWZAmJqP5DQESDojwi1AVHY8wEnbhDRI+hT0nK1LXA-iwAAMUvAA5OcAHVgBGP9NE8BieRsFi2MPZAAAMABJyCkyw+k-IsIDsPprNs0gO3Uf9PDsczNUU7FVKkQzApQT4vlMvEOOWEK4llL5eMIxUlO451sC4ujjAABRyMARLiuVEr6JSQo0xhtN0zz9N0C0jC+GgxIkg1Cuk8czxQDEvgo9F7EcSg3V4HhZDYKR0AIFYoAkOZzKTOA2GG4AEBITxowAKywXQGkcsoAEYCA2baAGYACYjoAdlwDYAE5Lp9MA2GcMA+jWjbGwIIRNIOrQIG21QEAADRhAApMAAC0-sBla4AAcWU5wzGUoMWAATU0oMJCYWhLv+5TFmAVAVu0YA-uU378YAa3wABZFaVgALwAeUIVAAFZKdphAWHpphAex3GABkSf+oHLmMA6g2GYwwxBiQQYANV+gHUGAGBZcuMpzL6wc8jZXp6QDTjKQCdUlDiLAhpGsaJoOTXNG0KQBm0AQxQCXXiMsA5+rtiAHad178Fd4rLwtA4gA | |
| interface IBase64Data { | |
| mimeType: string, | |
| filename: string, | |
| extension: string, | |
| b64data: string | |
| } | |
| function _base64ToArrayBuffer(base64: string) { | |
| var binary_string = atob(base64); | |
| var len = binary_string.length; | |
| var bytes = new Uint8Array(len); | |
| for (var i = 0; i < len; i++) { | |
| bytes[i] = binary_string.charCodeAt(i); | |
| } | |
| return bytes; | |
| } | |
| class Base64String { | |
| data: IBase64Data | |
| _b64: string | |
| constructor(base64String: string) { | |
| this._b64 = base64String; | |
| this.data = this._destructure(); | |
| } | |
| _destructure() { | |
| const groups = new RegExp(/(?:data:(.*?);)(?:.*;)*(?:name=(.*)\.(.*?);)(?:.*;)*base64,(.*)/).exec(this._b64); | |
| const [_, mimeType, filename, extension, b64data] = groups; | |
| return { mimeType, filename: decodeURIComponent(filename), extension, b64data } | |
| } | |
| getBuffer(): Uint8Array { | |
| return _base64ToArrayBuffer(this.data.b64data) | |
| } | |
| getBlob(): Blob { | |
| return new Blob([this.getBuffer()], { type: this.data.mimeType }); | |
| } | |
| getFileNameWithextension(): string { | |
| return `${this.data.filename}.${this.data.extension}`; | |
| } | |
| getFile(): File { | |
| return new File( | |
| [this.getBlob() as BlobPart], | |
| this.getFileNameWithextension(), | |
| { type: this.data.mimeType } | |
| ) | |
| } | |
| } | |
| const sampleB64Url = `data:application/json;name=1648132276899output.json;base64,W3sie1xcXCJtZXJjaGFudFRyYWRlTm9cXFwiIjoiXFxcIjk4MjUzODI5MzcyOTJcXFwiLFxcXCJ0b3RhbEZlZVxcXCIifV0=` | |
| const base64string = new Base64String(sampleB64Url); | |
| console.log(base64string.data); | |
| console.log(base64string.getFile()); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment