浅谈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 相关文章推荐
js DOM的学习笔记
Dec 22 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
Jul 24 Javascript
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
Ext JS添加子组件的误区探讨
Jun 28 Javascript
jQuery实现的在线答题功能
Apr 12 Javascript
JavaScript中eval函数的问题
Jan 31 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
May 23 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 Javascript
Node.js 使用AngularJS的方法示例
May 11 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
浅谈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短域名转换为实际域名函数
2011/01/17 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
openLayer4实现动态改变标注图标
2020/08/17 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
Python优先队列实现方法示例
2017/09/21 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
python对视频画框标记后保存的方法
2018/12/07 Python
python矩阵的转置和逆转实例
2018/12/12 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
dpn网络的pytorch实现方式
2020/01/14 Python
基于python实现对文件进行切分行
2020/04/26 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
毕业实习个人鉴定范文
2013/12/10 职场文书
廉洁使者实施方案
2014/03/29 职场文书
献爱心活动总结
2014/05/07 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
护理专业自荐信范文
2015/03/06 职场文书
七年级作文之英语老师
2019/10/28 职场文书
详解Django的MVT设计模式
2021/04/29 Python