FileReader实现上传图片前本地预览
平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到URL再渲染到页面上。或者使用前端插件。这篇博客使用的是HTML5的新特性——FileReader。由于兼容性,这种方法不适合pc端...FileReader具体的兼容性点这里:FileReader兼容性。
自从有了HTML5的FileReader对象以后,预览图片变得简单多了,不再需要后台的配合,并且JS操作本地文件已经成为了可能。这种方法的思路是:通过readAsDataURL(file)方法把图片文件转成base64编码,然后把base64编码替换到预览图片的src属性即可。这篇博文主要讲解使用方法,如果想要了解更多关于FileReader对象的,可以看一下这里:FileReader详解。下面分别讲解上传单张和多张的案例:
1、单张上传
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>上传单张预览</title>
</head>
<body>
<div id="wrapper">
<input id="fileUpload" type="file" />
<div id="image-holder"> </div>
</div> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script>
$("#fileUpload").on('change', function () { if (typeof (FileReader) != "undefined") {
var image_holder = $("#image-holder");
image_holder.empty(); var reader = new FileReader();
reader.onload = function (e) {
$("<img />", {
"src": e.target.result,
"class": "thumb-image"
}).appendTo(image_holder); } reader.readAsDataURL($(this)[0].files[0]); // url转base64
} else {
alert("你的浏览器不支持FileReader.");
}
});
</script>
</body>
</html>
2、多张上传
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>上传多张预览</title>
</head>
<body>
<div id="wrapper">
<input id="fileUpload" type="file" multiple /><br />
<div id="image-holder"> </div>
</div> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script>
$("#fileUpload").on('change', function () { //获取上传文件的数量
var countFiles = $(this)[0].files.length; var imgPath = $(this)[0].value;
var extn = imgPath.substring(imgPath.lastIndexOf('.') + 1).toLowerCase();
var image_holder = $("#image-holder");
image_holder.empty(); if (extn == "gif" || extn == "png" || extn == "jpg" || extn == "jpeg") {
if (typeof (FileReader) != "undefined") { // 循环所有要上传的图片
for (var i = 0; i < countFiles; i++) { var reader = new FileReader();
reader.onload = function (e) {
$("<img />", {
"src": e.target.result,
"class": "thumb-image"
}).appendTo(image_holder);
} reader.readAsDataURL($(this)[0].files[i]); //图片转base64
} } else {
alert("你的浏览器不支持FileReader!");
}
} else {
alert("请选择图像文件。");
}
});
</script>
</body>
</html>
参考链接:
http://www.cnblogs.com/tandaxia/p/5125275.html
http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/201706224590.html
FileReader实现上传图片前本地预览的更多相关文章
- 利用FileReader实现上传图片前本地预览
引子 平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到URL再渲染到页面上,这样做在图片比较小的时候没什么问题,大一点的话就会比较慢才能看到预览了,而且还产生了垃圾文件,所 ...
- HTML5文件上传前本地预览
HTML5之FileReader的使用 HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型 ...
- jquery实现图片上传前本地预览
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- jquery实现图片上传前本地预览功能
HTML <img id="pic" src="" > <input id="upload" name="fil ...
- 基于jquery实现图片上传本地预览功能
一.原理 分为两步: 当上传图片的input被触发并选择本地图片之后获取要上传的图片这个对象的URL(对象URL),把对象URL赋值给事先写好的img标签的src属性即可把图片显示出来.在这里,我们需 ...
- js实现上传图片本地预览功能以及限制图片的文件大小和尺寸大小
方法一: js: /** * 上传图片本地预览方法 * @param {Object} fileObj 上传文件file的id元素 fresh-fileToUpload * ...
- IE8/9 本地预览上传图片
本地预览的意思是,在选择图片之后先不上传到服务器,而是由一个<img>标签来预览本地的图片,非 IE8/9 浏览器可以从<input type="file"/&g ...
- FileReader本地预览图片
<body> <p><label>请选择一个图像文件:</label><input type="file" id=" ...
- jQuery图片上传前先在本地预览(不经过后端处理)
前段时间遇到一个问题,前端想实现图片上传预览(不经过后端PHP或JAVA处理),用户点击file按钮上传文件,点击确定马上就能看到预览的效果,但在实现的时候无论怎样都取不到file上图片的真实路径,得 ...
随机推荐
- C#线程和异步
C#Thread学习 C#ThreadPool学习 C#Task学习 C#backgroundWorker c# 锁的使用 C#前台线程和后台线程区别 C#Async,await异步简单介绍 C#委托 ...
- Windows上编译OpenImageIO
这里使用的是OpenImageIO 1.1.11,要将OIIO解压到[工作目录]/openimageio/oiio里面. 先要给OIIO打一个patch,patch文件是Blender提供的: 下载O ...
- struts2把表单数据封装到实体类里
<form method="post" action=""> <input type="text" name=" ...
- gulp 图片、样式、js、实时刷新等压缩gulpfile.js文件各个模块
1.压缩tinypng图片 gulp-tinypng-nokey,但不压缩gif格式(另外一个gulp-imagemin压缩率不高,可以压缩gif格式) // 获取 gulp var gulp = ...
- jQuery阻止默认行为
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF- ...
- Linux下简易进度条的实现
在生活中,进度条是很常见的,那么,进度条是如何实现的呢? 首先,进度条的动态是利用人眼视觉暂留效果的.实际上是如下过程: 先输出:[= ...
- iOS中的自由桥接
[摘抄自<iOS 6编程实战>] 与Objective-C库不同,我们在Objective-C中使用标准C语言和Core Foundation类库(CF*方法)不会遵循那些命名约定.这意味 ...
- javascript 私有化属性,和公共属性
function TestClassA(name, number) { this.name = name; //public this.number = number; //public var ac ...
- luogu P1518 两只塔姆沃斯牛 The Tamworth Two
luogu P1518 两只塔姆沃斯牛 The Tamworth Two 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在 ...
- 记录两道有趣的有关php数组的面试题
<?php $arr=[ ['张三','李四','王五'], ['吃鸡','消消乐','火影'], ['25','26','28'], ]; '如何转换为' $arr1=[ ['张三','吃鸡' ...