2

我正在使用 Web UI 读取本地 CSV 文件,并使用 HTML5 FileReader界面来处理本地文件流。这很好用。

但是,有时我希望在初始加载后不断更新正在读取的文件。我遇到了问题,我认为这可能与 FileReader API 有关。具体来说,在初始文件加载之后,我维护了对该文件的引用。然后,当我检测到文件的大小增加时,我slice关闭了文件的新部分,并获取了一个新Blob对象。但是,这些新 Blob 中似乎没有数据。

我正在使用 PapaParse 处理 CSV 解析,但我认为这不是问题的根源(尽管它可能是)。

源代码太多,这里就不贴了,这里有一些伪代码:

var reader = new FileReader();
reader.onload = loadChunk;
var file = null;

function readLocalFile(event) {
    file = event.target.files[0];
    // code that divides file up into chunks.
    // for each chunk:
    readChunk(chunk);
}

function readChunk(chunk) {
    reader.readAsText(chunk);
}

function loadChunk(event) {
    return event.target.result;
}

// this is run when file size has increased
function readUpdatedFile(oldLength, newLength) {
    var newData = file.slice(oldLength, newLength);
    readChunk(newData);
}

文件第一次加载时的输出loadChunk是一个字符串,但在文件更新后它是一个空白字符串。我不确定问题出在我的 slice 方法上,还是 FileReader 发生了我不知道的问题。

4

1 回答 1

1

File 对象的规范不应该允许这样:http ://www.w3.org/TR/FileAPI/#file - 它应该像一个快照。

您可以检测到大小已更改的事实可能是实现的缺点。

于 2016-01-12T02:03:58.280 回答