Skip to content

Instantly share code, notes, and snippets.

@akarsh1995
Last active June 30, 2022 14:15
Show Gist options
  • Select an option

  • Save akarsh1995/10e4fdc7451c88a71835368864af3b8c to your computer and use it in GitHub Desktop.

Select an option

Save akarsh1995/10e4fdc7451c88a71835368864af3b8c to your computer and use it in GitHub Desktop.
Convert base64 data-url to javascript File object
// 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