鍍金池/ 問(wèn)答/HTML/ 采用slice進(jìn)行文件切割時(shí),通過(guò)FileReader去獲取每個(gè)切割元素的res

采用slice進(jìn)行文件切割時(shí),通過(guò)FileReader去獲取每個(gè)切割元素的result報(bào)錯(cuò).

1.利用slice和fileReader實(shí)現(xiàn)一個(gè)大文件切割的測(cè)試,思路為對(duì)input type="file"的onchange中獲得的files[0]文件,按照chunkSize大小,對(duì)其進(jìn)行切分采用files[0].slice(start,end),且在切分過(guò)程中通過(guò)每次實(shí)例化一個(gè)FileReader對(duì)象,并通過(guò)監(jiān)聽(tīng)onLoad事件,并在onLoad后去獲取其對(duì)應(yīng)的result,結(jié)果報(bào)錯(cuò)。
2.`<!Doctype>
<html>
<head>

<title>This is a test about file</title>

</head>
<body>

<input type="file" id="myfile" name="myfile" onchange="dealup()"/>
<button onclick="showresult()">Show result</button>

</body>
<script>

const chunkSize = 10;
var myresult = new Array();
function dealup() {
    var file =document.getElementById("myfile").files[0];
    var chunks = Math.ceil(file.size/chunkSize);
    var filder = new Array(chunks);
    var start = 0,end = 0;
    console.log("文件總尺寸"+file.size);
    for(let curindex = 0; curindex < chunks;curindex++) {
            var tempcell = {
            data: "",
            n: 0
        };
        if(file.size-start <= chunkSize) {
            end = file.size;
        }else {
            end = start + chunkSize;
        }
        console.log("本次切割范圍:"+start + " " + end);
        tempcell.n = curindex;
        filder[curindex] = new FileReader();
        filder[curindex].readAsText(file.slice(start,end));
        filder[curindex].onload = function() {
            console.log(curindex + "# ")
            tempcell.data = filder[curindex].result;
             myresult.push(tempcell)
        }
        start = end;
        curindex++;
    }
}
function showresult() {
    console.log(myresult);
}

</script>
</html>`

3.結(jié)果報(bào)錯(cuò):
圖片描述

回答
編輯回答
悶騷型

應(yīng)該是進(jìn)行了兩次curindex++的原因

2017年10月28日 16:33