浅谈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 相关文章推荐
最常用的12种设计模式小结
Aug 09 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
jQuery Validate验证框架详解(推荐)
Dec 17 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
Apr 27 Javascript
three.js中文文档学习之创建场景
Nov 20 Javascript
React 无状态组件(Stateless Component) 与高阶组件
Aug 14 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
Aug 22 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
Sep 05 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
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
Bootstrap精简教程
2015/11/27 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
用python代码做configure文件
2014/07/20 Python
Python之str操作方法(详解)
2017/06/19 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python输入多行字符串的方法总结
2019/07/02 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
Keras loss函数剖析
2020/07/06 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
python SOCKET编程基础入门
2021/02/27 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
2014高考励志标语
2014/06/05 职场文书
上班离岗检讨书
2014/09/10 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL