HTML5 文件域+FileReader 分段读取文件(四)

一、分段读取txt文本

HTML:

<div class="container"><div class="panel panel-default"><div class="panel-heading">分段读取文件:</div><div class="panel-body"><input type="file" id="file" /><blockquote style="word-break:break-all;"></blockquote></div></div>
</div>

JS:

    var fileBox = document.getElementById('file');file.onchange = function () {//获取文件对象var file = this.files[0];var reader = new FileReader();//var step = 10 * 3 * 8; //固定长度截取 文件内容时注意,在切分点会有乱码出现的可能var step = 1024 * 512; //如果文件太大,截取内容小会出现假死现象,因为js执行是同步的var total = file.size;var cuLoaded = 0;console.info("文件大小:" + file.size);//读取一段成功reader.onload = function (e) {//处理读取的结果
            showResult(reader.result);cuLoaded += e.loaded;//如果没有读完,继续if (cuLoaded < total) {readBlob(cuLoaded);} else {cuLoaded = total;}}//处理显示读取结果$('blockquote').empty();function showResult(result) {//在读取结果处理中,如果没有Dom显示操作,速度还是非常快的//如果有Dom显示操作在IE下,很容易使浏览器崩溃//$('blockquote').append('<br />');//$('blockquote').append(result);
            console.info(result);}//开始读取readBlob(0);//指定开始位置,分块读取文件function readBlob(start) {//指定开始位置和结束位置读取文件  var blob = file.slice(start, start + step);    reader.readAsText(blob, 'gbk');}}

二.分段读取文件为二进制数组ArrayBuffer

HTML:

<div class="container"><div class="panel panel-default"><div class="panel-heading">分段读取文件:</div><div class="panel-body"><input type="file" id="file" /><blockquote style="word-break:break-all;"></blockquote></div></div>
</div>

JS:

var reader2 = new FileReader();
var fileBox = document.getElementById('file');
file.onchange = function () {//获取文件对象var file = this.files[0];var reader = new FileReader();var step = 1024* 1024;var total = file.size;var cuLoaded = 0;console.info("文件大小:" + file.size);//读取一段成功reader.onload = function (e) {//处理读取的结果
        showResult(reader.result);cuLoaded += e.loaded;//如果没有读完,继续if (cuLoaded < total) {readBlob(cuLoaded);} else {cuLoaded = total;}}//处理显示读取结果$('blockquote').empty();function showResult(result) {console.info(result);var buf = new Uint8Array(result);$('blockquote').append('<br/>');$('blockquote').append(buf.toString());}//开始读取readBlob(0);//指定开始位置,分块读取文件function readBlob(start) {//指定开始位置和结束位置读取文件  var blob = file.slice(start, start + step);  reader.readAsArrayBuffer(blob);}
}

三、读取分段结果的二次处理

var reader2 = new FileReader();
var fileBox = document.getElementById('file');
file.onchange = function () {//获取文件对象var file = this.files[0];var reader = new FileReader();var step = 10*2*8;var total = file.size;var cuLoaded = 0;//读取一段成功reader.onload = function (e) {//处理读取的结果
        showResult(reader.result);cuLoaded += e.loaded;//如果没有读完,继续if (cuLoaded < total) {console.info('cuLoaded:' + cuLoaded);readBlob(cuLoaded);} else {cuLoaded = total;}}//处理显示读取结果$('blockquote').empty();function showResult(result) {//解决方案 先读取 blob 然后在转换成 字符串//特别说明,如果使用Uint8Array 则每次读取数量应该是 8的倍数var buf = new Uint8Array(result);var blob = new Blob([buf]);reader2.readAsText(blob, 'gbk');reader2.onload = function (e) {$('blockquote').append('<br/>');$('blockquote').append(reader2.result);}}//开始读取readBlob(0);//指定开始位置,分块读取文件function readBlob(start) {//指定开始位置和结束位置读取文件var blob = file.slice(start, start+step);reader.readAsArrayBuffer(blob);}
}

 读取文件三:http://www.cnblogs.com/tianma3798/p/5839810.html

读取文件二:http://www.cnblogs.com/tianma3798/p/5839791.html

读取文件一:http://www.cnblogs.com/tianma3798/p/4355949.html

转载于:https://www.cnblogs.com/tianma3798/p/5839869.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CH340安卓驱动使用教程

使用 CH340/CH341 可以很容易在 Android 平台下实现 USB 转串口的功能&#xff0c;由于 CH340/CH341 是 USB 设备&#xff0c;如果使用手机或者平板来操作该芯片的话&#xff0c;就需要满足以下需求&#xff1a; 1. 需要基于 Android 3.1 及以上的系统 2. Android 设备具有 U…

undefined reference to

关于undefined reference这样的问题&#xff0c;大家其实经常会遇到&#xff0c;在此&#xff0c;我以详细地示例给出常见错误的各种原因以及解决方法&#xff0c;希望对初学者有所帮助。 1. 链接时缺失了相关目标文件&#xff08;.o&#xff09; 测试代码如下&#xff1a; 然…

epoll为什么比select和poll效率更高

基于 select 和 poll 方法的程序中&#xff0c;因为大量操作的消耗与当前连接数 n 成线性相关&#xff0c;从而导致单个任务的资源消耗和当前任务的关系是 O(n)。所以随着连接数目增大&#xff0c;积累起来的资源消耗很大&#xff0c;结果就是系统吞吐量和机器性能不匹配。为了…

Android 系统使用USB OTG功能/打开USB Host API功能

步骤一&#xff1a;确定 Android 设备是否支持 USB Host 功能&#xff0c;具体可以通过以下步骤进行确认&#xff1a; 1. 查看手机或平板设备参数&#xff0c;或者直接联系厂家咨询&#xff1b; 2. 使用 UsbHostDiagnostics.APK 安卓应用软件直接进行检测&#xff0c;汉化版软件…

Android开发之Handler

Handler 定义与作用 主要接受子线程发送的数据&#xff0c; 并用此数据配合主线程更新UI。 解释&#xff1a;当应用程序启动时&#xff0c;Android 首先会开启一个主线程&#xff08;也就是UI线程&#xff09;&#xff0c;主线程为管理界面中的UI控件&#xff0c;进行事件分…

Android日志Log使用

Android开发中日志工具的使用是十分重要的&#xff0c;可以帮助我们定位和查找程序执行的问题&#xff0c;了解程序执行过程等。这里以 Eclipse 下的的安卓开发为例进行说明。 打开 LogCat 功能 首先&#xff0c;确保 Eclipse 软件中已经打开了日志工具 LogCat 功能&#xff…

Android项目目录结构

在 Eclipse 中新建或者打开一个 Android 项目&#xff0c;可以看到目录视图如下所示&#xff1a; 其实项目开发中&#xff0c;使用频率较高的并不多&#xff0c;我们只要了解清楚不同类型的文件和不同目录的对应关系就可以了。 1. src src 目录用于存放 Java 代码&#xff0…

Libusb开发教程二 API介绍与使用

背景介绍 上一篇博文主要介绍了 Libusb 在 Linux 系统下的详细安装过程&#xff0c;除了 libusb-1.0.9.tar.bz2 离线包之外&#xff0c;还安装了 libusb-compat-0.1.4.tar.bz2。顾名思义&#xff0c;第二个是先前版本的兼容包&#xff0c;因此在使用过程中&#xff0c;开发者就…

tty,串口,控制台与驱动程序

tty 设备的名称是从过去的电传打字机缩写而来&#xff0c;最初是指链接到 Unix 系统上的物理或者虚拟终端。随着时间的推移&#xff0c;当通过串行口能够建立起终端连接后&#xff0c;这个名字也用来指任何的串口设备。物理 tty 设备的例子有串口、USB 到串口的转换器&#xff…

Linux 串口编程一 一些背景

在大部分讲解 Linux 编程书籍的时候会发现没有单独的串口编程章节&#xff0c;实际上串口编程已经被概括在了“终端”或者“终端IO”章节里面。在上一篇博客中对经常出现的几个容易混淆的概念进行简单描述&#xff1a;tty&#xff0c;串口&#xff0c;控制台与驱动程序。后面会…

Linux 终端概述与分类

该博文已经迁移到其他博客&#xff0c;参见&#xff1a; Linux 终端IO概念与背景介绍

Linux tty驱动程序一 架构

tty 核心概览如下图所示&#xff1a; 可以看到&#xff0c;tty 架构的划分层次&#xff0c;由下至上的逻辑关系为&#xff1a;硬件 -> tty 驱动 -> tty 线路规程&#xff08;也译为行规程&#xff09;-> tty 核心 -> 用户层。 内核负责控制 tty 设备的数据流&…

Linux 串口编程二 深入了解 termios

前言 这一系列串口编程重点在应用层编程&#xff0c;但是在讲解原理与相关概念时需要对驱动框架有个基础的认识。如果只是浅尝辄止&#xff0c;以后在遇到串口驱动与应用层程序调试难免遇到瓶颈。关于 tty驱动架构参见我的其他博客&#xff1a;Linux tty驱动程序架构。有时了解…

Libusb开发教程三 USB设备程序开发

首先&#xff0c;需要指出本篇博客的基础仍然是基于 libusb V1.0 以下。主要考虑到保持与之前博客的连贯性&#xff0c;在上一篇博客中介绍了老版本中可以被调用的 API 以及功能介绍&#xff0c;对于库中 API 接口函数的使用相信读者会一目了然&#xff0c;不需要刻意记忆&…

Linux 串口编程三 使用termios与API进行串口程序开发

在 termios 结构体以及内部终端控制标志中&#xff0c;并非所有的参数对于实际的物理串口都是有效的&#xff0c;在使用过程中也不需要对于所有标志的作用都有所理解。事实上&#xff0c;快速掌握一项技术的核心点也是一种学习能力。对于使用&#xff0c;熟悉并掌握操作框架十分…

Linux 串口编程四 串口设备程序开发

Linux 串口编程和程序相对来说是很简单的&#xff0c;之所以用博客连载来展示&#xff0c;主要是想在学会使用的基础上掌握相关背景&#xff0c;原理以及注意事项。相信在遇到问题的时候&#xff0c;我们就不会对于技术的概念和 API 的使用浅尝辄止了。下面进入具体应用案例&am…

POSIX 串口编程指南

介绍 POSIX 串口编程指南将教会你在你的 UNIX 工作站或者 PC 上面如何成功、有效以及可移植性的对串口编程。每一章提供了使用 POSIX 终端控制函数的编程例程&#xff0c;可以基本不经修改地工作在 IRIX, HP-UX, SunOS, Solaris, Digital UNIX, Linux 以及其他大多数 UNIX 操作…

串口流控

流控作用 这里讲到的“流”&#xff0c;指的是数据流。数据在两个串口之间传输时&#xff0c;当通讯双方速率不匹配时&#xff0c;常常会出现丢失数据的现象。如台式机与单片机之间的通讯&#xff0c;若接收端数据缓冲区已满&#xff0c;继续发送来的数据就会丢失。在早期网络…

电容的分类及作用

旁路 旁路电容是为本地器件提供能量的储能器件&#xff0c;它能使稳压器的输出均匀化&#xff0c;降低负载需求。就像小型可充电电池一样&#xff0c;旁路电容能够被充电&#xff0c;并向器件进行放电。为尽量减少阻抗&#xff0c;旁路电容要尽量靠近负载器件的供电电源管脚和…

快速解决 Android SDK Manager 无法下载或者下载速度慢

在这里以 Windows 下的 Android SDK Manager 为例&#xff0c;其他系统下与此类似&#xff0c;只会存在部分工具栏名称不同的情况&#xff0c;不明之处可以追问。下面就进入具体配置流程&#xff1a; 1. 选择 Tools->Options 进入代理设置。 代理设置选项&#xff0c;在 H…