js基础进阶--图片上传时实现本地预览功能的原理
欢迎访问我的个人博客:http://www.xiaolongwu.cn
前言
最近在项目上加一个图片裁剪上传的功能,用的是cropper插件,注意到选择本地图片后就会有预览效果,这里整理一下这种预览效果的实现原理;
实现原理
通过input的 type = file属性和js的内置FileReader对象,利用FileReader对象的readAsDataURL方法,把图片数据转成base64字符串数据,然后把这个base64字符串数据赋值给一个图片标签的src。
伪代码
//input标签,获取本地图片
<input type="file" onchange="uploadImg(this)" accept="image/*"/>
//预览图片标签
<img id="viewImg"/>
function uploadImg(fileDom) {
//取到file文件的本地路径,就是你电脑上的存储路径
console.log(fileDom.value);
// 获取图片数据
var file = fileDom.files[0];
// 获取图片名字
console.log(file.name);
// 获取图片文件大小,单位为byte
console.log(file.size);
var reader = new FileReader();
reader.readAsDataURL(file);
//确保文件成功获取,base64数据量比较大
reader.onload = function (e) {
var img = document.getElementById("viewImg");
img.src = e.target.result;
//或者 img.src = this.result; 因为e.target == this
}
}
知识延伸
FileReader除了readAsDataURL方法之外,还有另外两个比较重要的方法,分别为readAsBinaryString 将选择的文件读取成二进制和readAsText将选择的文件读取成文本格式 ;
我的github资源地址:https://github.com/js基础进阶--图片上传时实现本地预览功能的原理.md
我的个人博客地址:http://www.xiaolongwu.cn
我的博客园地址:http://www.cnblogs.com/wuxiaolong555
我的CSDN博客地址:https://blog.csdn.net/wxl1555
如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。
邮箱:wuxiaolong802@163.com
js基础进阶--图片上传时实现本地预览功能的原理的更多相关文章
- atitit.javascript js 上传文件的本地预览
atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL 1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ...
- html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题
先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html ...
- JavaScript实现本地图片上传前进行裁剪预览
本项目支持IE8+,测试环境IE8,IE9,IE10,IE11,Chrome,FireFox测试通过 另:本项目并不支持Vue,React等,也不建议,引入JQuery和Vue.React本身提倡的开 ...
- jq实现上传头像并实时预览功能
效果 页面结构 <form action="" name="form0" id="form0"> <input type= ...
- 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片
大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 @ 目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...
- javascript上传多张图片并预览
直接上代码 html代码 <div> <label>封面</label> <input type="file" id="cove ...
- HTML5 原生API input file 来实现多图上传,并大图预览
闲来无事,突然想用原生来实现图片的多图上传. 一.效果图大致如下: 1.上传时可以选择多图 2.上传之后缩略图下过图如下: 3.点击缩略图,大图展示当前所点击的图片,并可以左右滑动查看其它的缩略图对应 ...
- 文件上传框的美化+预览+ajax
1.文件上传基本写法: <input type="file" name="" id="" value="" /&g ...
- 上传APP加入视频预览--精简点名
上传APP加入视频预览--精简点名 在为精简点名APP制作视频预览时的坑: 1.视频预览不能太长.也不能太短15-30s就好.我录制的是18s 2.视频的帧数不能太大.也就是说你在录制视频的时候.要慢 ...
随机推荐
- UVa - 102 - Ecological Bin Packing
Background Bin packing, or the placement of objects of certain weights into different bins subject t ...
- 深入认识AsyncTask
1.概述 在android开发中是采用单线程模型,主线程通常称为UI线程,由于UI线程的操作不是线程安全的,因此android规定有关更新界面的操作必须在主线程中进行,其他线程直接报错. 如果我们把所 ...
- Leetcode_122_Best Time to Buy and Sell Stock II
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43155725 Say you have an array ...
- 不要使用jQuery触发原生事件
原文链接: DO NOT TRIGGER REAL EVENT NAMES WITH JQUERY! 原文日期: 2014年02月26日 翻译日期: 2014年03月2日 翻译人员: 铁锚 JavaS ...
- SpriteBuilder中本地化的局限性
最后,App中的(图片)logo仍然保留在英语格式. 未来SpriteBuilder将计划支持本地化资源文件,但是写作该篇的时候估计还没有实现. 你现在必须使用正规的iOS app的国际化技术来支持本 ...
- windows下追踪路由
追踪路由 tracert 目标ip/域名 测试两个ip是否畅通 ping 目标ip 在windows查看ip情况 ipconfig linux/unix下查看ip情况的使用 ifconfig
- C/C++语言中NULL、'\0’和0的区别
注:本文参考了http://blog.csdn.net/mylinx/article/details/6873253及书籍<征服C指针>([日]前桥和弥著). NULL.'\0'和0的值是 ...
- Linux常见压缩命令 - gzip,zcat,bzip2,bzcat
几个常见的压缩文件扩展名 *.Z compress 程序压缩的文件: *.gz gzip 程序压缩的文件: *.bz2 bzip2 程序压缩的文件: *.tar tar 程序打包的数据,并没有压缩过: ...
- Digogo ugdx文件的制作
The openplatform source code is in old IT FTP server at "vte/KCD/20150814/openplatform_wallace. ...
- 关于ARC的介绍和ARC与MRC混编解决
1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MR ...