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 相关文章推荐
自动更新作用
Oct 08 Javascript
在html页面上拖放移动标签
Jan 08 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
Apr 07 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
Jul 17 Javascript
JS+CSS实现Li列表隔行换色效果的方法
Feb 16 Javascript
jQuery实现统计输入文字个数的方法
Mar 11 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
原生javascript实现匀速运动动画效果
Feb 26 Javascript
任意Json转成无序列表的方法示例
Dec 09 Javascript
Vue制作Todo List网页
Apr 26 Javascript
vue2.0在table中实现全选和反选的示例代码
Nov 04 Javascript
vue页面加载时的进度条功能(实例代码)
Jan 13 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中extract()函数的妙用分析
2012/07/11 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
AutoSave/自动存储功能实现
2007/03/24 Javascript
asp 的 分词实现代码
2007/05/24 Javascript
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
JS实现打字游戏
2019/12/17 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
意向协议书范本
2014/04/23 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
我的长征观后感
2015/06/09 职场文书