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从头学起第一讲
Jul 04 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
Knockout text绑定DOM的使用方法
Nov 15 Javascript
js常用自定义公共函数汇总
Jan 15 Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 Javascript
javascript 动态修改css样式方法汇总(四种方法)
Aug 27 Javascript
jQuery动态生成Bootstrap表格
Nov 01 Javascript
JavaScript数据结构中串的表示与应用实例
Apr 12 Javascript
使用vue制作FullPage页面滚动效果
Aug 21 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
Mar 06 Javascript
如何使用vue slot创建一个模态框的实例代码
May 24 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 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
destoon复制新模块的方法
2014/06/21 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
python Tensor和Array对比分析
2020/01/08 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
Django xadmin安装及使用详解
2020/10/26 Python
介绍一下Java中标识符的命名规则
2014/02/03 面试题
农田水利实习自我鉴定
2013/09/19 职场文书
实习鉴定范文
2013/12/19 职场文书
节能环保口号
2014/06/12 职场文书
学生安全责任书范本
2014/07/24 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
十佳少年事迹材料
2014/12/25 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS
Python echarts实现数据可视化实例详解
2022/03/03 Python