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节点遍历next与nextAll方法使用示例
Jul 22 Javascript
JavaScript获取页面中超链接数量的方法
Nov 09 Javascript
js调出上下文菜单的实例
Dec 17 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
微信小程序 实现动态显示和隐藏某个控件
Apr 27 Javascript
JavaScrpt判断一个数是否是质数的实例代码
Jun 11 Javascript
详解Webpack DLL用法以及功能
Jul 11 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
Oct 14 jQuery
Vue动态获取width的方法
Aug 22 Javascript
vue弹窗插件实战代码
Sep 08 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
Jan 14 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
漂亮但不安全的CTB
2006/10/09 PHP
php限制ip地址范围的方法
2015/03/31 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
php fread读取文件注意事项
2016/09/24 PHP
封装html的select标签的js操作实例
2013/07/02 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
在Python中操作字典之update()方法的使用
2015/05/22 Python
Python编码类型转换方法详解
2016/07/01 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
什么是makefile? 如何编写makefile?
2013/01/02 面试题
校园广播稿500字
2014/02/04 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
教师求职自荐书
2014/06/14 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
python文件目录操作之os模块
2021/05/08 Python
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js