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代码
Nov 20 Javascript
JavaScript Event学习第三章 早期的事件处理程序
Feb 07 Javascript
jquery animate图片模向滑动示例代码
Jan 26 Javascript
javascript 在firebug调试时用console.log的方法
May 10 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
Jan 27 Javascript
jquery ajax双击div可直接修改div中的内容
Mar 04 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
Oct 19 Javascript
vue中实现methods一个方法调用另外一个方法
Feb 08 Javascript
利用JS如何获取form表单数据
Dec 19 Javascript
详解javascript脚本何时会被执行
Feb 05 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
vue 组件简介
2020/07/31 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
接待员岗位责任制
2014/02/10 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
3的组成教学反思
2014/04/30 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书