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 相关文章推荐
javascript中的107个基础知识收集整理 推荐
Mar 29 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
Aug 11 Javascript
Javascript中的数据类型之旅
Oct 18 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
Nov 24 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
Jul 10 Javascript
vue2.0与bootstrap3实现列表分页效果
Nov 28 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 jQuery
解决vue点击控制单个样式的问题
Sep 05 Javascript
Vue前后端不同端口的实现方法
Sep 19 Javascript
npm ci命令的基本使用方法
Sep 20 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使用memcache存储session的详解
2013/06/25 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
基于jQuery的表格操作插件
2010/04/22 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
python实现感知器算法(批处理)
2019/01/18 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
python实现图像外边界跟踪操作
2020/07/13 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
四查四看剖析材料
2014/02/14 职场文书
求职意向书
2014/04/01 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
班主任培训研修日志
2015/11/13 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
SQL中的连接查询详解
2022/06/21 SQL Server