Determining the last file chunk

守給你的承諾、 提交于 2019-12-06 09:32:17

Why not rely on the filesize, i.e. check the condition _chunkSize + _offset >= fileSize?

You can use progress, loadend events to process File object one byte at a time; define a variable where processing should be paused or stopped at nth byte, every nth byte, or any byte during processing of file.

var str = "abcdefghijklmnopqrstuvwxyz";
var type = "application/octet-stream";
var data = new Blob([], {
  type: type
});
var filename = "file.txt";
var reader = new FileReader();
var complete = false;
var beforeEnd = false;
var stopAt = str.length - 1;

function handleFile(e) {
  data = new File([data.slice()
                   , str.slice(data.size, data.size + 1)]
                   , filename, {
                       type: type,
                       lastModifiedDate: new Date()
          });
}

function handleRead(e) {
  if (data.size <= str.length && !complete) {
    if (data.size === stopAt && !beforeEnd) {
      beforeEnd = true;
      var r = new FileReader();
      r.onloadend = function() {            
        alert(`stopAt: ${stopAt}\n`
              +`data.size: ${data.size}\n`
              +`result at stopAt: ${r.result[stopAt -1]}`);
        reader.readAsArrayBuffer(data);
      }
      r.readAsText(data);
    } else {
      reader.readAsArrayBuffer(data)
    }
  } else {
    console.log("complete")
  }
}

function handleProgress(e) {
  if (data.size <= str.length && !complete) {
    var read = new FileReader();
    read.onload = function() {
      if (!complete) {
        console.log(read.result);
        if (read.result.length === str.length) {
          complete = true;
          console.log(data);
        }
      }
    }
    read.readAsText(data);
  }
}

reader.addEventListener("load", handleFile);

reader.addEventListener("loadend", handleRead);

reader.addEventListener("progress", handleProgress);

reader.readAsArrayBuffer(data);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!