js 上传文件预览的简单实例


Posted in Javascript onAugust 16, 2016

1. FILE API

html5提供了FIle和FileReader两个方法,可以读取文件信息并读取文件。

2. example

<html>
<body>
<div id="test-image-preview" 
style="border: 1px solid rgb(204, 204, 204); width: 100%; height: 200px; background-size: contain; background-repeat: no-repeat; background-position: center center;"> </div>
<br/>
<div id="test-file-info"></div>
<br/>
<input type="file" id="test-image-file">
<script type="text/javascript">

var
  fileInput = document.getElementById('test-image-file'),
  info = document.getElementById('test-file-info'),
  preview = document.getElementById('test-image-preview');
// 监听change事件:
fileInput.addEventListener('change', function () {
  // 清除背景图片:
  preview.style.backgroundImage = '';
  // 检查文件是否选择:
  if (!fileInput.value) {
    info.innerHTML = '没有选择文件';
    return;
  }
  // 获取File引用:
  var file = fileInput.files[0];
  // 获取File信息:
  info.innerHTML = '文件: ' + file.name + '<br>' +
           '大小: ' + file.size + '<br>' +
           '修改: ' + file.lastModifiedDate;
  if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
    alert('不是有效的图片文件!');
    return;
  }
  // 读取文件:
  var reader = new FileReader();
  reader.onload = function(e) {
    var
      data = e.target.result; // 'data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...'      
    preview.style.backgroundImage = 'url(' + data + ')';
  };
  // 以DataURL的形式读取文件:
  reader.readAsDataURL(file);
});
</script>

</body>
</html>

以DataURL的形式读取到的文件是一个字符串,类似于data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...,

常用于设置图像。如果需要服务器端处理,把字符串base64,后面的字符发送给服务器并用Base64解码就可以得到原始文件的二进制内容。

3. 解释

上面的代码还演示了JavaScript的一个重要的特性就是单线程执行模式。在JavaScript中,浏览器的JavaScript执行引擎在执行JavaScript代码时,总是以单线程模式执行,也就是说,任何时候,JavaScript代码都不可能同时有多于1个线程在执行。

你可能会问,单线程模式执行的JavaScript,如何处理多任务?

在JavaScript中,执行多任务实际上都是异步调用,比如上面的代码:

reader.readAsDataURL(file);

就会发起一个异步操作来读取文件内容。因为是异步操作,所以我们在JavaScript代码中就不知道什么时候操作结束,因此需要先设置一个回调函数:

reader.onload = function(e) {
  // 当文件读取完成后,自动调用此函数:
};

当文件读取完成后,JavaScript引擎将自动调用我们设置的回调函数。执行回调函数时,文件已经读取完毕,所以我们可以在回调函数内部安全地获得文件内容。

以上这篇js 上传文件预览的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript document.referrer判断访客来源网址
May 15 Javascript
使用Raygun来自动追踪AngularJS中的异常
Jun 23 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
Oct 29 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
Nov 25 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 Javascript
详解Axios统一错误处理与后置
Sep 26 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
React中阻止事件冒泡的问题详析
Apr 12 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 Javascript
jQuery操作元素的内容和样式完整实例分析
Jan 10 jQuery
js removeChild 方法深入理解
Aug 16 #Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 #Javascript
总结Node.js中的一些错误类型
Aug 15 #Javascript
自动化测试读写64位操作系统的注册表
Aug 15 #Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 #Javascript
JavaScript中removeChild 方法开发示例代码
Aug 15 #Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
Aug 15 #Javascript
You might like
在Windows版的PHP中使用ADO
2006/10/09 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
JS中的作用域链
2017/03/01 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
python搭建微信公众平台
2016/02/09 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
给民警的表扬信
2014/01/08 职场文书
巧克力蛋糕店创业计划书
2014/01/14 职场文书
会计辞职信范文
2014/01/15 职场文书
材料会计岗位职责
2014/03/06 职场文书
运动会宣传口号
2014/06/09 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库