您在字串中有Base64 編碼的二進位數據,並且想要建立一個包含此資料的Blob URL 並將其顯示給使用者。具體來說,目標是從Base64 字串建立Blob 對象,如下面的程式碼片段所示:
const blob = new Blob(????, {type: contentType}); const blobUrl = URL.createObjectURL(blob);
將Base64 字串解碼為Blob 物件JavaScript,依照以下步驟操作:
解碼base64 data:使用atob函數將base64字串解碼為字串:
const byteCharacters = atob(b64Data);
將位元組字元轉換為位元組值:建立陣列透過取得位元組值中每個字元的字元代碼點(charCode) string:
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 建構函式來建立 Blob物件:
const blob = new Blob([byteArray], {type: contentType});
程式碼上面功能齊全,但可以透過在處理之前將位元組字元切成更小的區塊來提高效能。
這是一個完整的範例,從 Blob 建立影像元素:
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);
以上是如何在 JavaScript 中從 Base64 字串建立 Blob?的詳細內容。更多資訊請關注PHP中文網其他相關文章!