JS中利用FileReader实现上传图片前本地预览功能


Posted in Javascript onMarch 02, 2018

引子

      平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到URL再渲染到页面上,这样做在图片比较小的时候没什么问题,大一点的话就会比较慢才能看到预览了,而且还产生了垃圾文件,所以比较好的是上传之前先在本地预览一下。

      之前做项找插件的时候就知道纯前端可以实现图片本地预览,可今天面试的时候被问到时竟然一脸懵逼,然后竟然无意中就在电脑桌面发现了实现的demo,然后根据demo查了一下API,稍微总结下:

首先得拿到File对象

      当用input标签上传图片时event对象中会包含file对象的一个集合

event.target.files

核心是FileReader对象

根据MDN上的说法:

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

首先要作为构造函数得到一个FileReader的实例对象

var freader = new FileReader();

利用readAsDataURL()方法读取指定的内容

freader.readAsDataURL(file);

最后就是一个事件处理,相当于监控读取进度,我们这里是当读取完成时渲染图片,所以用onload

freader.onload = function(e) { console.log(e); myImg.setAttribute('src', e.target.result); }

这里架加载完成之后最终得到的是一个base64编码的src地址,具体为什么下次查清楚了再专门写篇关于base64编码的文章

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <form action=""> 
 <input type="file" name="files" id="fileTog" accept="image/*" multiple="multiple" onchange="changImg(event)"> 
 <img alt="暂无图片" id="myImg" src="" height="100px" width="100px"> 
 </form>
 <script>
 function changImg(e){ 
 var myImg = document.getElementById('myImg');
 for (var i = 0; i < e.target.files.length; i++) { 
 var file = e.target.files[i]; 
 console.log(file); 
 if (!(/^image\/.*$/i.test(file.type))) { 
  continue; //不是图片 就跳出这一次循环 
 } 
 //实例化FileReader API 
 var freader = new FileReader(); 
 freader.readAsDataURL(file); 
 freader.onload = function(e) { 
  console.log(e);
  myImg.setAttribute('src', e.target.result); 
 } 
 } 
 }
 </script>
</body>
</html>

后记

      通过这件事就暴露了我学习新东西的一个问题,就是查出来看一遍觉得知道了就行了,这种习惯是特别害人的,以后每当有个疑问查出来之后不仅要查是怎么做的,还要了解一下为什么可以这么做,所谓知其然知其所以然。还有就是平时的代码能用手敲的尽量别复制,复制一时是爽了,可要手写的时候写不出来也是听尴尬的。

      今天是来杭州的第三天,面试的第二天,这两天的面试中暴露出的一个重要问题就是平时太依赖搜索引擎,用脑太少,连一些简单API就没记全,前端确实还是有很多东西就是要牢牢记住的,没什么捷径可走,这些东西就是基础,没记住就是基础差。虽然你并不影响你做出东西来,但会影响开发效率,技术要往上走,这个基石必须稳,加油记吧!

总结

以上所述是小编给大家介绍的JS中利用FileReader实现上传图片前本地预览,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js 阻止子元素响应父元素的onmouseout事件具体实现
Dec 23 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
jquery让指定的元素闪烁显示的方法
Mar 17 Javascript
浅谈Javascript的静态属性和原型属性
May 07 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
Aug 05 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
JavaScript 中 apply 、call 的详解
Mar 21 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
Nov 27 Javascript
vue 插件的方法代码详解
Jun 06 Javascript
微信小程序转发事件实现解析
Oct 22 Javascript
vue 获取url里参数的两种方法小结
Nov 12 Javascript
select标签设置默认选中的选项方法
Mar 02 #Javascript
原生JavaScript实现todolist功能
Mar 02 #Javascript
js判断输入框不能为空格或null值的实现方法
Mar 02 #Javascript
vue判断input输入内容全是空格的方法
Mar 02 #Javascript
Spring Boot/VUE中路由传递参数的实现代码
Mar 02 #Javascript
vue项目tween方法实现返回顶部的示例代码
Mar 02 #Javascript
Vue2.0系列之过滤器的使用
Mar 01 #Javascript
You might like
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
layer实现弹出层自动调节位置
2019/09/05 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
python 字符串格式化代码
2013/03/17 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
舞蹈教育学专业推荐信
2013/11/27 职场文书
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
擅自离岗检讨书
2014/02/11 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
安全守法证明
2015/06/23 职场文书
新教师教学工作总结
2015/08/14 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书