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 相关文章推荐
学习ExtJS Panel常用方法
Oct 07 Javascript
js 处理URL实用技巧
Nov 23 Javascript
Jquery 动态循环输出表格具体方法
Nov 23 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
Feb 16 Javascript
jQuery基于ID调用指定iframe页面内的方法
Jul 06 Javascript
js判断PC端与移动端跳转
Dec 24 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
浅谈VUE监听窗口变化事件的问题
Feb 24 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 Javascript
vue项目中使用tinymce编辑器的步骤详解
Sep 11 Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 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编写PDF文档生成器
2006/10/09 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
用jscript启动sqlserver
2007/06/21 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
javascript实现密码验证
2015/11/10 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
2020/06/17 Javascript
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python生成密码库功能示例
2017/05/23 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
讲座主持词
2014/03/20 职场文书
广播节目策划方案
2014/05/23 职场文书
企业精神口号
2014/06/11 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
2014年人事科工作总结
2014/11/19 职场文书
高中生军训感言
2015/08/01 职场文书