atob
समारोह बाइनरी डेटा के प्रत्येक बाइट के लिए एक चरित्र के साथ एक नया स्ट्रिंग में एक Base64- एन्कोड स्ट्रिंग डिकोड होगा।
const byteCharacters = atob(b64Data);
प्रत्येक चरित्र का कोड बिंदु (चारकोड) बाइट का मूल्य होगा। हम .charCodeAt
स्ट्रिंग में प्रत्येक वर्ण के लिए विधि का उपयोग करके इसे बाइट मानों की एक सरणी बना सकते हैं ।
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
आप इस प्रकार के बाइट मानों को Uint8Array
कंस्ट्रक्टर में पास करके वास्तविक टाइप बाइट सरणी में बदल सकते हैं ।
const byteArray = new Uint8Array(byteNumbers);
बदले में इसे एक सरणी में लपेटकर और इसे Blob
कंस्ट्रक्टर को पास करके एक BLOB में परिवर्तित किया जा सकता है ।
const blob = new Blob([byteArray], {type: contentType});
उपरोक्त कोड काम करता है। हालाँकि, byteCharacters
छोटे स्लाइस में प्रसंस्करण के बजाय प्रदर्शन को थोड़ा बेहतर किया जा सकता है , बजाय एक बार में। मेरे किसी न किसी परीक्षण में 512 बाइट्स एक अच्छे स्लाइस आकार के लगते हैं। यह हमें निम्नलिखित फ़ंक्शन देता है।
const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, {type: contentType});
return blob;
}
const blob = b64toBlob(b64Data, contentType);
const blobUrl = URL.createObjectURL(blob);
window.location = blobUrl;
पूर्ण उदाहरण:
const b64toBlob = (b64Data, contentType='', sliceSize=512) => {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, {type: contentType});
return blob;
}
const contentType = 'image/png';
const b64Data = 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
const blob = b64toBlob(b64Data, contentType);
const blobUrl = URL.createObjectURL(blob);
const img = document.createElement('img');
img.src = blobUrl;
document.body.appendChild(img);