HTML 5 关于文件读取学习笔记

对象URL也被称为blob URL,指的是引用保存在File或Blob中数据的URL。使用对象URL的好处是,我们没有必要去调用File Reader就可以读取到对应的数据。为了创建对象URL,可以使用window.URL.createObjectURL()方法创建,并传入一个File或Bolb对象。其兼容的处理方案如下:

复制
  
  
  1. function createObjectURL(blob) {
  2. if(window.URL) {
  3. return window.URL.createObjectURL(blob);
  4. }else if(window.webkitURL) {
  5. return window.webkitURL.createObjectUrl(blob);
  6. }else {
  7. return null;
  8. }
  9. }

以下是一个示例,通过blob插入到img标签中:

HTML代码

复制
  
  
  1. <label for="imageList">请选择文件<input type="file" id="imageList" multiple name="image" accept="image/*" /></label>
  2. <p id="imageRemark">暂无内容</p>

JS 代码

复制
  
  
  1. window.addEventListener('load',function(){
  2. var imageList = document.getElementById('imageList'),
  3. imageRemark = document.getElementById('imageRemark');
  4.  
  5. imageList.addEventListener('change',function(e){
  6. if(!this.files.length) return ;
  7.  
  8. var url = null,
  9. i= 0,
  10. l=this.files.length,
  11. html = '';
  12. for(;i<l;i++){
  13. url = createObjectURL(this.files[i]);
  14. if(url) {
  15. html+= '<img src=\"' + url +'\"/>';
  16. }
  17. url = null;
  18. }
  19.  
  20. imageRemark.innerHTML = html;
  21.  
  22. },false);
  23. },false);

以上代码中,其实是直接读取图片文件放入到内存中,然后创建对象URL来形成内存中的引用。直接插入到img标签上,相比用FileReader来讲,效率确实高出很多。但由于文件读取是放在内存中,如果存在对图片的引用,那么图片占用的内存就不会被释放。要手动去清除内存的话,就可以直接把对象URL当作参数的形式传给window.URL.revokeObjectURL()。由于不同浏览器带的前缀不同,所以就有了以下的兼容函数:

复制
  
  
  1. function revokeObject(url){
  2. if(window.URL) {
  3. window.URL.revokeObjectURL(url);
  4. } else if(window.webkitURL) {
  5. window.webkitURL.revokeObjectURL(url)
  6. }
  7. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值