【问题标题】:Can files be updated and read using the JavaScript FileReader interface?可以使用 JavaScript FileReader 接口更新和读取文件吗?
【发布时间】:2023-12-19 05:16:02
【问题描述】:

我正在使用 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 发生了我不知道的问题。

【问题讨论】:

    标签: javascript csv filereader papaparse


    【解决方案1】:

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

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

    【讨论】:

    • 那会很有趣。文件处理程序肯定会显示大小变化。使用 Chrome 版本 47.0.2526.106 作为记录。
    • 似乎很可能是这种情况。感谢您提醒我始终先阅读规范!