1、分段讀取txt文本html
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'); } }
二.分段讀取文件爲二進制數組ArrayBufferapp
HTML:this
<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:spa
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); } }
3、讀取分段結果的二次處理code
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.htmlhtm