blob转dataUrl

382 阅读1分钟
  • 遇到了从zip文件导出来的文件,文件路径变成"blob:"开头
  • 下面那个函数可以直接把那个blob:文件转为可以在loader.load(url,callback)的url参数使用
window.BlobToDataURL = (blobUrl) => {
    var xhr = new XMLHttpRequest;
    xhr.responseType = 'blob';

    xhr.onload = function() {
       var recoveredBlob = xhr.response;
       var reader = new FileReader;
       reader.onload = function() {
         var blobAsDataUrl = reader.result;
         console.log(blobAsDataUrl)
       };
       reader.readAsDataURL(recoveredBlob);
    };
    xhr.open('GET', blobUrl);
    xhr.send();
}
  • 后面想着把所有的url转为blob
  • 先遍历JSON,
function getAllJson(jsons) {
        for(key in jsons) {
                if(!(jsons[key] instanceof Object)){
                        jsons[key] = '1';
                }else{
                        getAllJson(jsons[key]); //如果是Object则递归
                } 
        }
};
```- 汇总
```js
async function getAllJson(jsons) {
    for(key in jsons) {
        if(!(jsons[key] instanceof Object)){
             if(jsons[key] !== undefined  && jsons[key] !== null && jsons[key].toString().toUpperCase().indexOf('HTTP') === 0){
                 await BlobToDataURL(jsons[key]).then((src)=>{
                    jsons[key] = src;
                    console.log(jsons[key]);
                 });
             }
        }else{
            getAllJson(jsons[key]); //如果是Object则递归
        } 
    }
};
function BlobToDataURL(blobUrl){
    return new Promise((resolve) => {
        var xhr = new XMLHttpRequest;
        xhr.responseType = 'blob';

        xhr.onload = function() {
        var recoveredBlob = xhr.response;
        var reader = new FileReader;
        reader.onload = function() {
            resolve(reader.result);
        };
        reader.readAsDataURL(recoveredBlob);
        };
        xhr.open('GET', blobUrl);
        xhr.send();
    })
}