浅谈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之卸载鼠标事件的代码
May 14 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
Aug 09 Javascript
javascript中数组的多种定义方法和常用函数简介
May 09 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 Javascript
网页中JS函数自动执行常用三种方法
Mar 30 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
详解使用fetch发送post请求时的参数处理
Apr 05 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 Javascript
javascript+css实现进度条效果
Mar 25 Javascript
Javascript前端下载后台传来的文件流代码实例
Aug 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+SqlServer实现分页显示
2006/10/09 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
Python实现端口复用实例代码
2014/07/03 Python
python3编码问题汇总
2016/09/06 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
python xlsxwriter模块的使用
2020/12/24 Python
铁路安全反思材料
2014/12/24 职场文书
材料员岗位职责
2015/02/10 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
Java数据结构之堆(优先队列)
2022/05/20 Java/Android