展开目录
读取Blob的内容实体
nodejsjavascriptBlob
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

浏览器上数据流的表示形式是一个Blob对象,可访问的属性只有readonly的size和type。所以在浏览器上,一个Blob对象的数据实体内容是读不到的。虽然不知道这种设计的原因是什么,但在websocket接收数据流的时候需要读取数据流字节,所以我尝试实现了一个解析内容的方法。

首先我只需要考虑兼容支持Blob的浏览器,更古老的浏览器直接忽略。

由于知识有限,我想到的办法有两个:

  1. 通过FileReader读取blob

    <meta charset='utf-8' />
    <script>
    onerror=function(e){
    // 如果Promise或者Blob不支持,你会看到这个报错
    alert(e);
    };
    function parseBlobToArray(blob){
    var p=Promise.defer();
    try{
     var f=new FileReader;
     f.onload=function(e){
       try{
         p.resolve(new Uint8Array(e.target.result));
       }catch(e){ p.reject(e); }
     };
     f.readAsArrayBuffer(b);
    }catch(e){
     p.reject(e);
    }
    return p.promise;
    }
    var b=new Blob(['AAAA']); // 创建一个Blob对象
    parseBlobToArray(b).then(function(result){
    alert(['Data: ',result]); // Data: [65,65,65,65]
    },function(e){
    alert(['Error: ',e]);
    });
    </script>
  2. 通过xhr读取bloburl

    <meta charset='utf-8' />
    <script>
    onerror=function(e){
    // 如果Promise或者Blob不支持,你会看到这个报错
    alert(e);
    };
    function parseBlobToArray(blob){
    var p=Promise.defer();
    try{
     var f=new XMLHttpRequest;
     f.open('GET',URL.createObjectURL(blob),1);
     f.responseType='arraybuffer';
     f.onreadystatechange=function(){
       if(f.readyState<4)return;
       try{
         p.resolve(new Uint8Array(f.response));
       }catch(e){ p.reject(e); }
     };
     f.send();
    }catch(e){
     p.reject(e);
    }
    return p.promise;
    }
    var b=new Blob(['AAAA']); // 创建一个Blob对象
    parseBlobToArray(b).then(function(result){
    alert(['Data: ',result]); // Data: [65,65,65,65]
    },function(e){
    alert(['Error: ',e]);
    });
    </script>

兼容性参考列表:

相关文档

暂无

随便看看

  1. 定长消息队列读写优化

  2. 安卓文字偏上,文字顶部被遮罩

  3. word文件命令行打印

  4. nodejs 长连接

  5. nginx用域名来转发请求

  6. SSL certificate problem: self signed certificate in certificate chain

  7. npm包命令行调用

  8. nodejs本地双向代理 端口转发

  9. nodejs俄罗斯方块

  10. npm设置仓库地址和代理

  11. webrtc泄漏本地ip信息

  12. git配置服务端支持http认证

  13. git记住/删除账号密码

  14. centos查看最近一次的开机时间

  15. 随机取某个概率区间的代码

  16. bootstrap modal弹框导致ie无法获取焦点

  17. youku电脑版跳过广告代码

  18. 前端性能观察器

畅言模块加载中