视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
H5的FileReader分布读取文件应该如何使用以及其方法简介
2020-11-27 15:06:30 责编:小采
文档


这次给大家带来H5的FileReader分布读取文件应该如何使用以及其方法简介,H5的FileReader分布读取文件的使用以及其方法简介的注意事项有哪些,下面就是实战案例,一起来看一下。

先介绍一下H5中FileReader的一些方法以及事件

FileReader方法

名称 作用

about() 终止读取

readAsBinaryString(file) 将文件读取为二进制编码

readAsDataURL(file) 将文件读取为DataURL编码

readAsText(file, [encoding]) 将文件读取为文本

readAsArrayBuffer(file) 将文件读取为arraybuffer

FileReader事件

名称

作用

onloadstart 读取开始时触发

onprogress 读取中

onloadend 读取完成触发,无论成功或失败

onload 文件读取成功完成时触发

onabort 中断时触发

onerror 出错时触发

代码

分布读取文件核心思想, 将文件分块以每M进行读取.

HTML部分

<!DOCTYPE html>
<html lang="en">
 
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
 
<body>
 <form>
 <fieldset>
 <legend>分步读取文件:</legend>
 <input type="file" id="File">
 <input type="button" value="中断" id="Abort">
 <p>
 <lable>读取进度:</lable>
 <progress id="Progress" value="0" max="100"></progress>
 </p>
 </fieldset>
 </form>
 <script src="./loadFile.js"></script>
 <script>
 
 var progress = document.getElementById('Progress');//进度条
 
 var events = {
 load: function () {
 console.log('loaded');
 },
 progress: function (percent) {
 console.log(percent);
 progress.value = percent;
 },
 success: function () {
 console.log('success');
 }
 };
 var loader;
 
 // 选择好要上传的文件后触发onchange事件
 document.getElementById('File').onchange = function (e) {
 var file = this.files[0];
 console.log(file)
 
 //loadFile.js
 loader = new FileLoader(file, events);
 };
 
 document.getElementById('Abort').onclick = function () {
 loader.abort();
 }
 </script>
</body>
</html>

loadFile.js部分

/*
* 文件读取模块
* file 文件对象
* events 事件回掉对象 包含 success , load, progress
*/
var FileLoader = function (file, events) {
 this.reader = new FileReader();
 this.file = file;
 this.loaded = 0;
 this.total = file.size;
 //每次读取1M
 this.step = 1024 * 1024;
 this.events = events || {};
 //读取第一块
 this.readBlob(0);
 this.bindEvent(); 
}
 
FileLoader.prototype = {
 bindEvent: function (events) {
 var _this = this,
 reader = this.reader;
 
 reader.onload = function (e) {
 _this.onLoad();
 };
 
 reader.onprogress = function (e) {
 _this.onProgress(e.loaded);
 };
 
 // start 、abort、error 回调暂时不加
 },
 // progress 事件回掉
 onProgress: function (loaded) {
 var percent,
 handler = this.events.progress;//进度条
 
 this.loaded += loaded;
 percent = (this.loaded / this.total) * 100;
 handler && handler(percent);
 },
 // 读取结束(每一次执行read结束时调用,并非整体)
 onLoad: function () {
 var handler = this.events.load;
 
 // 应该在这里发送读取的数据
 handler && handler(this.reader.result);
 
 
 
 // 如果未读取完毕继续读取
 if (this.loaded < this.total) {
 this.readBlob(this.loaded);
 } else {
 // 读取完毕
 this.loaded = this.total;
 // 如果有success回掉则执行
 this.events.success && this.events.success();
 }
 },
 // 读取文件内容
 readBlob: function (start) {
 var blob,
 file = this.file;
 
 // 如果支持 slice 方法,那么分步读取,不支持的话一次读取
 if (file.slice) {
 blob = file.slice(start, start + this.step);
 } else {
 blob = file;
 }
 
 this.reader.readAsText(blob);
 },
 // 中止读取
 abort: function () {
 var reader = this.reader;
 
 if(reader) {
 reader.abort();
 }
 }
}

相信看了这些案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

相关阅读:

超链接的宽高怎样设置

在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值

如何用html的title属性实现鼠标悬停显示文字

下载本文
显示全文
专题