浅谈js图片前端预览之filereader和window.URL.createObjectURL


Posted in Javascript onJune 30, 2016

浅谈js图片前端预览之filereader和window.URL.createObjectURL

//preview img : filereader方式
  document.getElementById('imgFile').onchange = function(e){ 5     var ele = document.getElementById('imgFile').files[0];

    var fr = new FileReader();
    fr.onload = function(ele){

      var pvImg = new Image();
      pvImg.src = ele.target.result;
      pvImg.setAttribute('id','previewImg');

      $('.preview_wrap').html('').append(pvImg);18     }
    fr.readAsDataURL(ele);
  }
//preview img : URL.createObjectURL 方式
  document.getElementById('imgFile').onchange = function(e){
    var ele = document.getElementById('imgFile').files[0];

    var createObjectURL = function(blob){
     return window[window.webkitURL ? 'webkitURL' : 'URL']['createObjectURL'](blob);
    };
    var newimgdata = createObjectURL(ele);

    var pvImg = new Image();
    pvImg.src = newimgdata;
    pvImg.setAttribute('id','previewImg');

    $('.preview_wrap').html('').append(pvImg);
  }

以上先贴出用filereader 和 URL.createObjectURL 两种预览方式。

按照前辈们的说法,creatObjectURL可以有更好的性能,或许是浏览器自带接口的原因, 可以处理的更快。

最近做了一个需要上传图片预览的项目,用的最简单的input file上传,最开始想到的就是用filereader实现前端预览,很简单,见前面的第一段代码,在自己手机上测试,没问题。但在某些奇葩手机上,比如oppo 安卓4.3在我们app的webview内通过打开相册上传发现无法预览图片!但在该手机的微信,浏览器内上传均可以!

看了下代码,如下图,是因为base64编码内缺少了图片格式,手动加上image/jpg图片立即显示,刚开始以为是readAsDataURL的问题,没有编码成功,找了一晚上原因,无解!不知哪根筋搭错突然想到打印出input file的type看看,发现type为空,而file的其他属性均正常。

浅谈js图片前端预览之filereader和window.URL.createObjectURL

继续百度(google最近公司FQ不稳定,没法用),结果看到有人遇到类似奇怪问题,但是没有解决。

无意间却发现图片预览除了filereader还可以用url.createObjectURL。晚上11点26,先赶最后一班地铁。

=====================

第二天一早,把半夜的灵感实验了下,根据判断input file的图片类型,如果不存在就给文件手动赋值类型。(见下方调试用代码,有点乱)

浅谈js图片前端预览之filereader和window.URL.createObjectURL

结果发现file的type并不是你直接赋值就可以改变的,没有用!

于是开始实践URL.createObjectURL (见最上面的第二部分代码)

神奇!发现预览正常!

查看代码发现,createObjectURL得到的是一个http格式的文件,即使input file的文件类型不存在也不会编码失败。

浅谈js图片前端预览之filereader和window.URL.createObjectURL

以上这篇浅谈js图片前端预览之filereader和window.URL.createObjectURL就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在JavaScript中遭遇级联表达式陷阱
Mar 08 Javascript
JavaScipt基本教程之JavaScript语言的基础
Jan 16 Javascript
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
Jan 11 Javascript
js和php如何获取当前url的内容
Sep 22 Javascript
js事件绑定快捷键以ctrl+k为例
Sep 30 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
简述AngularJS相关的一些编程思想
Jun 23 Javascript
javascript获取网页宽高方法汇总
Jul 19 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
vue-router3.0版本中 router.push 不能刷新页面的问题
May 10 Javascript
详解webpack模块加载器兼打包工具
Sep 11 Javascript
浅谈JS中json数据的处理
Jun 30 #Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 #Javascript
JS中Json数据的处理和解析JSON数据的方法详解
Jun 29 #Javascript
简单实现js间歇或无缝滚动效果
Jun 29 #Javascript
js精准的倒计时函数分享
Jun 29 #Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
Jun 29 #Javascript
RequireJS多页面应用实例分析
Jun 29 #Javascript
You might like
php 用sock技术发送邮件的函数
2007/07/21 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
python的正则表达式re模块的常用方法
2013/03/09 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
开展读书活动总结
2014/06/30 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书