2

Web UI を使用してローカル CSV ファイルを読み込んでおり、HTML5 FileReaderインターフェイスを使用してローカル ファイル ストリームを処理しています。これはうまくいきます。

ただし、最初のロード後に、読み取られるファイルを継続的に更新したい場合があります。問題が発生しています。FileReader API に関係があるのではないかと思います。具体的には、最初のファイルの読み込み後、ファイルへの参照を維持します。次に、ファイルのサイズが大きくなったことを検出すると、ファイルsliceの新しい部分を削除して、新しい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文字列ですが、ファイルが更新された後は空白の文字列になります。問題がスライス メソッドにあるのか、それとも FileReader に気付いていない何かが起こっているのかはわかりません。

4

1 に答える 1

1

File オブジェクトの仕様では、これを許可するべきではありません: http://www.w3.org/TR/FileAPI/#file -- これはスナップショットのようなものであるはずです。

サイズが変更されたことを検出できるという事実は、おそらく実装の欠点です。

于 2016-01-12T02:03:58.280 に答える