大家好 !!  又见面了, 今天我们来搞一搞   H5的新增API    FileReader     真是一个超级超级方便的API呢!!!很多场景都可以使用..........

我们先不赘述MDN文档里的内容, 我们从  1  到  0, 从 一个 小Demo 入手 开始 了解 它;

请开始你的表演:

是不是简单又炫酷, 我们从头开始来看, 界面分三个部分

1   文件input框

2    预览部分

3   进度条

HTML代码:

 <div class="file-preview">
<div class="add" style="width: 50px;height: 50px;line-height: 50px;text-align: center;background-color: #eeeeee;position: relative;" >
+
<input type="file" id="fileInput" style="opacity: 0;z-index: 1;position: absolute;top: 0;left: 0;width: 100%;height: 100%;cursor: pointer;">
</div>
<div class="image-box" style="margin-top: 20px;height: 200px;line-height: 0">
<img src="" alt="" style="max-height: 200px;display: none" id="image">
<video src="" controls style="display: none;" height="200"></video>
</div>
<div class="progress" style="background-color: #cccccc;width: 700px;height: 20px;position: relative;text-align: center;line-height: 20px;margin-top: 20px;">
<span id="percent">0%</span>
<div class="loading" style="position: absolute;height: 100%;background-color: blue;top: 0;left: 0;"></div>
</div>
</div>

HTML结构应该很清晰吧,  我们重点讲js部分

First      获取要操作的Dom元素

    

 var img = document.querySelector('#image');   // 获取image

 var video = document.querySelector('video');  //  获取video

 var input = document.querySelector('#fileInput'); // 获取input

 var loading = document.querySelector('.loading'); // 获取进度条

 var percent = document.querySelector('#percent'); // 获取百分比

 var reader = new FileReader(); // 初始化一个 FileReader

 var file = {}; // 文件对象

 var fileType = ''; //  文件类型

Second    监听input 上的change事件   ,  获取选择的本地文件

 input.addEventListener('change', function(event) {
file = event.target.files[0]; // 获取文件对象
video.style.display = 'none'; // 隐藏video
img.style.display = 'none'; // 隐藏image
percent.innerHTML = '0%'; // 初始化百分比
loading.style.width = '0px'; // 初始化进度条
if (event.target.files.length) {
fileType = file.type.split('/')[0]; // 获取文件类型
reader.readAsDataURL(file); // 开始读取文件
}
});

 fileReader 上   readAsDataURL() 方法是把文件 转换成 一个 base64编码的字符串,可以放在图片或者视频的src里, 最常用

        readAsText()  把文件 转换成 一个特定编码格式的字符串, 没有指定编码格式默认为utf-8  常用

        readAsBinaryString()  把文件 转化成一个二进制数据  了解即可

        readAsArrayBuffer() 把文件 转换成一个 ArrayBuffer 数据  了解即可

 

 这些方法转换后的数据都在FileReader.result上    ,还有一个终止读取的方法   abort()

  继续正题.................

Third    文件开始读取后    FileRead 给我们提供了   读取   状态  的 事件    , 我们绑定这些事件来看看效果:

 reader.onabort = function (e) {   // 终止读取触发     abort()方法会触发它
console.log('abort')
}; reader.onloadstart = function (e) { // 开始读取触发
console.log('start')
}; reader.onprogress = function (e) { // 读取过程触发 可以获得读取进度 percent.innerHTML = (e.loaded/e.total).toFixed(2) * 100 + '%'; // 进度百分比 loading.style.width = (e.loaded/e.total) * 700 + 'px'; // 进度百分比 乘 总宽度 等于 进度条的宽度
}; reader.onload = function (e) { // 读取结束并且读取成功触发 在这里可以拿到result
console.log('loaded');
loading.style.width = '700px'; // 进度条完成
percent.innerHTML = '100%'; // 百分比完成
if (fileType === 'video') {
video.src = this.result;
video.style.display = 'block' // 显示视频
} else if (fileType === 'image'){
img.src = this.result;
img.style.display = 'block' // 显示图片
}
}; reader.onloadend = function (e) { // 读取结束触发 , 在load之后
console.log('end')
};

这里要注意一点,  load 是读取成功触发,   loadend 不管读取成功或者失败都会触发,

所以我们在load  里拿到转化结果。

到此   demo  就做完啦!!!!!!!

同学们学会了吗,

最后提一嘴,  虽然FileReader 很好用     ,  但是  ————————————

————————   base64转码很费时间, 如果文件非常大的话, 很慢。。。。。

还有可能转不出来。。。。。

这种情况  推荐使用    URL.createObjectURL(file)创建一个DOMString, 直接使用这个DOMString 就好啦,

使用完记得 使用   URL.revokeObjectURL()   清掉

本期讲解到此结束, 我们下期再见  。

H5 新特性之 fileReader 实现本地图片视频资源的预览的更多相关文章

  1. JS兼容各个浏览器的本地图片上传即时预览效果

    JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...

  2. JS兼容各个浏览器的本地图片上传即时预览效果\、

    在firefox\chrome\ie10等浏览器中可以使用HTML5中的内容实现图片即时预览效果,在IE10以下浏览器中使用滤镜来解决图片显示问题. HTML5中的FileReader对象主要是把文件 ...

  3. 用FileReader对象获取图片base64代码并预览

    MDN中FileReader的详细介绍: https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 用FileReader获取图片base ...

  4. 使用input选择本地图片,并且实现预览功能

    1.使用input标签选择本地图片文件 用一个盒子来存放预览的图片 2.JS实现预览 首先添加一个input change事件,再用到 URL.createObjectURL() 方法 用来创建 UR ...

  5. H5新特性汇总

    H5新特性: 新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 ...

  6. H5新特性-视频,音频-Flash-canvas绘图

    json格式 json - > AJAX json:数据格式,通常是以字符串形式表示 对象 {"name":"james","age" ...

  7. H5新特性--WebStorage--WebSocke

    今天的目标 3.2:h5新特性--WebStorage localStorage  在客户端浏览器保存数据 永久保存 保存数据 localStorage [key] = value 保存数据 loca ...

  8. H5新特性---Web Worker---Web Stroage

    今天的目标 3.1:h5新特性八--Web Worker---代码就3行 程序:program 存储在外存(磁盘)中代码 进程:Process/Task 将程序调用内存中,分配空间 线程:Thread ...

  9. H5新特性---SVG--椭圆--直线--文本--滤镜(高斯滤镜--模糊)--地理定位

    今天的目标 3.1:h5新特性--SVG--椭圆 <ellipse rx="" ry=""  cx="" cy="" ...

随机推荐

  1. 在MySQL和PostgreSQL之外,为什么阿里要研发HybridDB数据库?

    http://www.infoq.com/cn/news/2016/12/MySQL-PostgreSQL-Greenplum 编者按 在大数据火遍IT界之前,大家对数据信息的挖掘通常聚焦在BI(Bu ...

  2. svn Server sent unexpected return value (403 Forbidden) in response to CHECKOUT

    今天,提交資料到公司svn服務器,但是一直提示 Server sent unexpected return value (403 Forbidden) in response to CHECKOUT ...

  3. ws-trust、域、webservice接口的总结

    最近燃料公司门户做了一个待办的汇总,从三个数据源拿数据汇总到首页,这三个数据源分别是域认证的接口,域认证的webservices,证书加密的接口,下面就这些接口,做一下简单总结 1 pfx证书的探索过 ...

  4. php中$_FILES应用实例

    允许用户从表单上传文件是非常有用的.先来看一段HTML表单代码 <html> <body> <form action="upload_file.php" ...

  5. MySQL分组、链接的使用

    一.深入学习  group by group by ,分组,顾名思义,把数据按什么来分组,每一组都有什么特点. 1.我们先从最简单的开始: select count(*) from tb1 group ...

  6. Caffe 编译后 make runtest 出现locale::facet::_S_create_c_locale 错误

    You might need to append LC_ALL="en_US.UTF-8" to file: /etc/default/locale and reboot your ...

  7. github routine

    1. 从官方库fork 自己的分支库后,git clone到local. 2. local的remotes/origin默认是自己的分支库.可以添加remotes/upstream指向官方库. 3. ...

  8. ES的基本用法

    ES的基本概念 1> 集群和节点 一个es集群是由一个或多和es节点组成的集合 每一个集群都有一个名字, 如之前的wali 每个节点都有自己的名字, 如之前的master, slave1, sl ...

  9. PAT1106:Lowest Price in Supply Chain

    1106. Lowest Price in Supply Chain (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CH ...

  10. macbook 添加快捷启动服务

    来至 Mac OS X: Launch Terminal from keyboard shortcut os x 上很多功能都可以通过Apple自家的Automator.app创建,且使用此方法可以为 ...