浅谈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 相关文章推荐
运行Node.js的IIS扩展iisnode安装配置笔记
Mar 02 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
基于pako.js实现gzip的压缩和解压功能示例
Jun 13 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
Feb 09 Javascript
jsonp跨域及实现百度首页联想功能的方法
Aug 30 Javascript
jQuery实现表格的增、删、改操作示例
Jan 27 jQuery
jQuery实现动态添加和删除input框实例代码
Mar 26 jQuery
javascript获取元素的计算样式
May 24 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
深入webpack打包原理及loader和plugin的实现
May 06 Javascript
JavaScript的Set数据结构详解
Feb 18 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 current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
python爬虫获取多页天涯帖子
2018/02/23 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
初二学生评语大全
2014/12/26 职场文书
项目合作意向书
2015/05/08 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers