浅谈HTML5 FileReader分布读取文件以及其方法简介


Posted in HTML / CSS onNovember 09, 2017

本文介绍了浅谈HTML5 FileReader分布读取文件以及其方法简介,分享给大家。具体如下:

效果图

老规矩先上效果图

浅谈HTML5 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();
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3属性使网站设计增强同时不消弱可用性
Aug 29 HTML / CSS
浅析rem和em和px vh vw和% 移动端长度单位
Apr 28 HTML / CSS
CSS3 :default伪类选择器使用简介
Mar 15 HTML / CSS
html5 利用canvas手写签名并保存的实现方法
Jul 12 HTML / CSS
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
Jan 23 HTML / CSS
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
Jan 31 HTML / CSS
HTML5和以前HTML4的区别整理
Oct 20 HTML / CSS
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
Aug 18 HTML / CSS
有关HTML5中背景音乐的自动播放功能
Oct 16 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
Apr 09 HTML / CSS
H5 video poster属性设置视频封面的方法
May 25 HTML / CSS
关于HTML编码导致的乱码问题
Sep 04 HTML / CSS
如何避免常见的6种HTML5错误用法
Nov 06 #HTML / CSS
HTML5添加禁止缩放功能
Nov 03 #HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
Nov 02 #HTML / CSS
HTML5新特性之语义化标签
Oct 31 #HTML / CSS
解决HTML5手机端页面缩放的问题
Oct 27 #HTML / CSS
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
Oct 26 #HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
Oct 23 #HTML / CSS
You might like
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
调整PHP的性能
2013/10/30 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
代码生成器 document.write()
2007/04/15 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
大学专科生推荐信范文
2013/11/23 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
长城的导游词
2015/01/30 职场文书
团干部培训班心得体会
2016/01/06 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
springcloud整合seata
2022/05/20 Java/Android