| /** |
| * convert RFC 1342-like base64 strings to array buffer |
| * @param {mixed} obj |
| * @returns {undefined} |
| */ |
| function recursiveBase64StrToArrayBuffer(obj) { |
| let prefix = '=?BINARY?B?'; |
| let suffix = '?='; |
| if (typeof obj === 'object') { |
| for (let key in obj) { |
| if (typeof obj[key] === 'string') { |
| let str = obj[key]; |
| if (str.substring(0, prefix.length) === prefix && str.substring(str.length - suffix.length) === suffix) { |
| str = str.substring(prefix.length, str.length - suffix.length); |
| |
| let binary_string = window.atob(str); |
| let len = binary_string.length; |
| let bytes = new Uint8Array(len); |
| for (var i = 0; i < len; i++) { |
| bytes[i] = binary_string.charCodeAt(i); |
| } |
| obj[key] = bytes.buffer; |
| } |
| } else { |
| recursiveBase64StrToArrayBuffer(obj[key]); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Convert a ArrayBuffer to Base64 |
| * @param {ArrayBuffer} buffer |
| * @returns {String} |
| */ |
| function arrayBufferToBase64(buffer) { |
| var binary = ''; |
| var bytes = new Uint8Array(buffer); |
| var len = bytes.byteLength; |
| for (var i = 0; i < len; i++) { |
| binary += String.fromCharCode( bytes[ i ] ); |
| } |
| return window.btoa(binary); |
| } |