8

JavaScript プロセスは大量のデータ (200-300MB) を生成します。このデータをさらに分析するために保存したいと思いますが、これまでに見つけた最良の方法は、この例を使用して保存することですhttp://jsfiddle.net/c2U2T/これは、すべてのデータが必要なように見えるため、私にとってはオプションではありませんダウンロードを開始する前に利用できます。しかし、私が必要とするのは次のようなものです

var saver = new Saver();
saver.save(); // The Save As ... dialog appears
saver.onaccepted = function () { // user accepted saving
    for (var i = 0; i < 1000000; i++) {
        saver.write(Math.random());
    }
};

もちろん、Math.random() の代わりに、意味のある構造になります。

4

2 に答える 2

1

あなたが実際にやろうとしているのは、一種のストリーミングです。つまり、FileAPI はこのタスクには適していません。代わりに、次の 2 つのオプションを提案できます。

1 つ目は、XHR 機能、つまり ajax を使用して、データをサーバーに順次送信されるいくつかのチャンクに分割することです。チャンク位置)。データを分割して再構築する作業が追加され、より良い解決策があるため、お勧めしません。

これを実現する 2 つ目の方法は、Websocket API を使用することです。生成されたデータをサーバーに順次送信できます。通常のストリーム API に従います。これは絶対必要だと思います。

このページは、http: //binaryjs.com/から始めるのに適した場所かもしれません。

以上です!

あなたのコメントを考慮して編集:

あなたの主張を完全に理解できるかどうかはわかりませんが、HTML5 の FileSystem API はどうですか?

ここにいくつかの例があります: http://www.html5rocks.com/en/tutorials/file/filesystem/このサンプルでは、​​既存のファイルにデータを追加できます。新しいファイルなどを作成することもできます:

function onInitFs(fs) {

  fs.root.getFile('log.txt', {create: false}, function(fileEntry) {

    // Create a FileWriter object for our FileEntry (log.txt).
    fileEntry.createWriter(function(fileWriter) {

      fileWriter.seek(fileWriter.length); // Start write position at EOF.

      // Create a new Blob and write it to log.txt.
      var blob = new Blob(['Hello World'], {type: 'text/plain'});

      fileWriter.write(blob);

    }, errorHandler);

  }, errorHandler);

}

編集2:

SO here で述べたように、あなたがやろうとしていることはjavascriptを使用することはできません。それにもかかわらず、著者は、必要な動作を実現するために Java アプレットを使用することを提案しています。

簡単に言うと、HTML5 Filesystem API はサンドボックス化されたファイルシステムのみを提供します。つまり、ブラウザの隠しディレクトリに配置されます。したがって、真のファイルシステムにアクセスしたい場合は、ユースケースを考慮すると Java を使用するだけで十分です。ここにJavaとjavascriptの間にインターフェースがあると思います。ただし、データをブラウザーからのみ利用できるようにしたい場合 (同一オリジン ポリシーによる制約)、FileSystem API を使用します。

于 2013-05-13T13:51:22.263 に答える