浅谈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 相关文章推荐
jqgrid 简单学习笔记
May 03 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
一个不错的js html页面倒计时可精确到秒
Oct 22 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
Apr 27 Javascript
jQuery蓝色风格滑动导航栏代码分享
Aug 19 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
深入理解js数组的sort排序
May 28 Javascript
详解Node.js利用node-git-server快速搭建git服务器
Sep 27 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
Sep 28 Javascript
理理Vue细节(推荐)
Apr 16 Javascript
原生JavaScript实现弹幕组件的示例代码
Oct 12 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
一个JS翻页效果
2007/07/23 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
XENON基于JSON变种
2010/07/27 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python简单验证码识别的实现方法
2019/05/10 Python
python实现操作文件(文件夹)
2019/10/31 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python 如何对logging日志封装
2020/12/02 Python
python中pyqtgraph知识点总结
2021/01/26 Python
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
家长通知书教师评语
2014/04/17 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
事业单位岗位说明书
2015/10/08 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
Python3 如何开启自带http服务
2021/05/18 Python
Python数据分析之绘图和可视化详解
2021/06/02 Python