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 相关文章推荐
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
May 10 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
Sep 21 Javascript
基于jquery实现的省市区级联无ajax
Sep 24 Javascript
$.each遍历对象、数组的属性值并进行处理
Jul 18 Javascript
解决jquery实现的radio重新选中的问题
Jul 03 Javascript
javascript实现延时显示提示框特效代码
Apr 27 Javascript
js生成随机数(指定范围)的实例代码
Jul 10 Javascript
原生js实现查询天气小应用
Dec 09 Javascript
iscroll实现下拉刷新功能
Jul 18 Javascript
谈谈对vue响应式数据更新的误解
Aug 01 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
May 30 Javascript
简单了解TypeScript中如何继承 Error 类
Jun 21 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
php中变量及部分适用方法
2008/03/27 PHP
php中大括号作用介绍
2012/03/22 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
AngularJS初始化静态模板详解
2016/01/14 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Python验证码识别的方法
2015/07/10 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Python模块WSGI使用详解
2018/02/02 Python
python游戏地图最短路径求解
2019/01/16 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
绩效专员岗位职责
2013/12/02 职场文书
经营理念标语
2014/06/21 职场文书
搞笑老公保证书
2015/02/26 职场文书
大学生求职信怎么写
2015/03/19 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
2016年敬老月活动总结
2016/04/05 职场文书