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

时间: 2024-09-30 15:46:31

HTML5 文件域+FileReader 分段读取文件(四)的相关文章

HTML5 文件域+FileReader 分段读取文件并上传(八)-WebSocket

一.同时上传多个文件处理 HTML: <div class="container"> <div class="panel panel-default"> <div class="panel-heading">分段读取文件:</div> <div class="panel-body" id="bodyOne"> <input type=&quo

HTML5 文件域+FileReader 分段读取文件并上传(七)-WebSocket

一.单文件上传实例 HTML: <div class="container"> <div class="panel panel-default"> <div class="panel-heading">分段读取文件:</div> <div class="panel-body"> <input type="file" id="file

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

一.默认FileReader会分段读取File对象,这是分段大小不一定,并且一般会很大 HTML: <div class="container"> <!--文本文件验证--> <input type="file" id="file" /> <h4>选择文件如下:</h4> <blockquote></blockquote> </div> JS: //读

HTML5 文件域+FileReader 分段读取文件并上传到服务器(六)

说明:使用Ajax方式上传,文件不能过大,最好小于三四百兆,因为过多的连续Ajax请求会使后台崩溃,获取InputStream中数据会为空,尤其在Google浏览器测试过程中. 1.简单分段读取文件为Blob,ajax上传到服务器 <div class="container"> <div class="panel panel-default"> <div class="panel-heading">分段读取文件

html5中利用FileReader来读取文件。

利用FileReader来读取文件的能够来实现即时预览的效果,这个也是在html5中才有的功能. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> &l

Java利用内存映射文件实现按行读取文件

我们知道内存映射文件读取是各种读取方式中速度最快的,但是内存映射文件读取的API里没有提供按行读取的方法,需要自己实现.下面就是我利用内存映射文件实现按行读取文件的方法,如有错误之处请指出,或者有更好更快的实现方式麻烦也提供一下代码. 代码如下: public class testMemoryMappedFile { public static void main(String[] agrs) throws IOException{ RandomAccessFile memoryMappedFi

php高效遍历文件夹、高效读取文件

/** * PHP高效遍历文件夹 * @param string $path 目录路径 * @param integer $level 目录深度 */ function fn_scandir($path = './', $level = 0) { $file = new FilesystemIterator($path); $filename = ''; $prefix = ''; $url = ''; foreach ($file as $fileinfo) { $filename = $fi

HTML5 文件域+FileReader 读取文件(二)

一.读取文本文件内容,指定字符编码 <div class="container"> <!--文本文件验证--> <input type="file" id="file" multiple accept="text/plain" /> <input type="button" id="btn1" value="读取文件内容" o

使用FileReader接口读取文件内容

如果想要读取或浏览文件,则需要通过FileReader接口,该接口不仅可以读取图片文件,还可以读取文本或二进制文件,同时,根据该接口提供的事件与方法,可以动态侦察文件读取时的详细状态,接下来,我们详细介绍FileReader接口的使用方法. FileReader 接口 FileReader 接口提供了一个异步的API,通过这个API可以从浏览器主线程中异步访问文件系统中的数据,基于此原因,FileReader 接口可以读取文件中的数据,并将读取的数据放入内存中. 当访问不同文件时,必须重新调用F