Firefox 69 或是 Chrome 76 以後的版本, blob 透過擴展函數 arrayBuffer( ) 可以取得其中的內容, arrayBuffer( ) 可以用在像是透過 webSocket 取得的 blob 資料, 或是放入陣列中(_blobArray)再用 Blob 建構式產生的新 blob, 若是舊版本只能透過 FileReader 去讀取, 以下程式碼搭配 Promise 物件模擬 arrayBuffer 的讀取行為:
// arrayBuffer reader
async function blobReader(_blobArray) {
const blobTemp = new Blob(_blobArray);
if( blobTemp.arrayBuffer ) return await blobTemp.arrayBuffer( );
else { // use FileReader & Promise to read
var _ready = null;
const _arrayBuffer = new Promise((_resolv, _) => _ready=_resolv);
const _reader = new FileReader( );
_reader.onloadend = ( ) => _ready && _ready(_reader.result);
_reader.readAsArrayBuffer(blobTemp);
return await _arrayBuffer;
}
}
沒有留言:
張貼留言