4

CSV/TSV データをクリーンアップする Web アプリケーションを作成しました。このアプリを使用すると、CSV ファイルをアップロードして読み取り、データを修正してから、正しいデータを含む新しい CSV ファイルをダウンロードできます。私が遭遇した課題の 1 つは、2500 行を超えるファイルをダウンロードすることです。ブラウザーがクラッシュし、次のエラー メッセージが表示されます。

"Aw, Snap! Something went wrong while displaying this webpage..."

これを回避するために、すべてのデータがダウンロードされるまで、2500 行を超えない複数の CSV ファイルをダウンロードするようにプログラミングを変更しました。次に、ダウンロードした CSV ファイルを最終的なファイルにまとめます。それは私が探している解決策ではありません。100,000 行をはるかに超えるファイルを扱う場合、すべてのコンテンツを 40 ではなく 1 つのファイルでダウンロードする必要があります。フロントエンド ソリューションも必要です。

以下は、CSV ファイルをダウンロードするためのコードです。隠しリンクを作成し、データ配列 (各要素には 1000 行あります) の内容をエンコードし、隠しリンクのパスを作成しています。次に、リンクをクリックしてダウンロードを開始します。

var startDownload = function (data){
    var hiddenElement = document.createElement('a');
    var path = 'data:attachment/tsv,';
    for (i=0;i<data.length;i++){
        path += encodeURI(data[i]);
    }
    hiddenElement.href = path;
    hiddenElement.target = '_blank';
    hiddenElement.download = 'result.tsv';
    hiddenElement.click();
}

私の場合、上記のプロセスは一度に ~ 2500 行で機能します。大きなファイルをダウンロードしようとすると、ブラウザがクラッシュします。ブラウザをクラッシュさせずに大きなファイルをダウンロードするにはどうすればよいですか? ブラウザをクラッシュさせているファイル (12,000 行 x 48 列)

psファイルのアップロードが可能なGoogle Chromeでこれらすべてを行っています。したがって、ソリューションは Chrome で機能するはずです。

4

2 に答える 2

0

私も同じ問題に直面しました。このコードを使用しましたが、正常に動作します。これを試すこともできます。

if (window.navigator.msSaveBlob) {
    window.navigator.msSaveBlob(new Blob([base64toBlob($.base64.encode(excelFile), 'text/csv')]),'data.csv');
} else {
var link = document.createElement('a');
link.download = 'data.csv';
// If u use chrome u can use webkitURL in place of URL
link.href = window.URL.createObjectURL(new Blob([base64toBlob($.base64.encode(excelFile), 'text/csv')]));
link.click();
}
于 2015-06-19T09:11:47.210 に答える