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中的有名函数和无名函数
Oct 17 Javascript
javascript在事件监听方面的兼容性小结
Apr 07 Javascript
jquery tab插件制作实现代码
Jun 22 Javascript
jquery背景跟随鼠标滑动导航
Nov 20 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
Apr 27 Javascript
jQuery实现的简单在线计算器功能
May 11 jQuery
bootstrap响应式表格实例详解
May 15 Javascript
Javascript继承机制详解
May 30 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
js中的深浅拷贝问题简析
May 10 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/01 无线电
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
python函数装饰器用法实例详解
2015/06/04 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
NET程序员上机面试题
2015/05/23 面试题
某科技软件测试面试题
2013/05/19 面试题
介绍下Lucene建立索引的过程
2016/03/02 面试题
党的群众路线整改落实情况汇报
2014/10/28 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
生日宴会祝酒词
2015/08/10 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
VUE递归树形实现多级列表
2022/07/15 Vue.js