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 相关文章推荐
屏蔽网页右键复制和ctrl+c复制的js代码
Jan 04 Javascript
jQuery移除元素自动解绑事件实现思路及代码
May 31 Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 Javascript
JavaScript中的无阻塞加载性能优化方案
Oct 10 Javascript
JS简单计算器实例
Jan 20 Javascript
js轮盘抽奖实例分析
Apr 17 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
JavaScript实现随机五位数验证码
Sep 27 Javascript
JavaScript鼠标拖拽事件详解
Apr 03 Javascript
详解vue-router的Import异步加载模块问题的解决方案
May 13 Javascript
JavaScript多种图形实现代码实例
Jun 28 Javascript
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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
图书管理程序(一)
2006/10/09 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
python实现用户登陆邮件通知的方法
2015/07/09 Python
python爬虫之百度API调用方法
2017/06/11 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
详解Python中is和==的区别
2019/03/21 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
python 带时区的日期格式化操作
2020/10/23 Python
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
美国知名生活购物网站:Goop
2017/11/03 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
学生爱国演讲稿
2014/01/14 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
毕业设计致谢语
2015/05/14 职场文书
《春酒》教学反思
2016/02/22 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python