浅谈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 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
js继承 Base类的源码解析
Dec 30 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
iphone safari不支持position fixed的解决方法
May 04 Javascript
通过Javascript读取本地Excel文件内容的代码示例
Apr 08 Javascript
Egret引擎开发指南之发布项目
Sep 03 Javascript
js实现继承的5种方式
Dec 01 Javascript
基于JS脚本语言的基础语法详解
Jul 22 Javascript
详解react-redux插件入门
Apr 19 Javascript
Vue项目中最新用到的一些实用小技巧
Nov 06 Javascript
vue路由教程之静态路由
Sep 03 Javascript
javascript实现滚轮轮播图片
Dec 13 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判断是否有Get参数的方法
2014/05/05 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
Python实现处理管道的方法
2015/06/04 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
python交换两个变量的值方法
2019/01/12 Python
Python多进程写入同一文件的方法
2019/01/14 Python
详解如何减少python内存的消耗
2019/08/09 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
小学生美德少年事迹
2014/02/02 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
六一儿童节开幕词
2015/01/29 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript