我可以使用javascript在本地创建并保存一个庞大的文件吗?

时间:2015-02-23 17:44:12

标签: javascript client-side progressive-download

我想用javascript创建并保存一个大的.csv文件客户端。之前已经提出并回答了这个问题(例如,请参阅1234),这归结为两种方法(其中包括):

  1. 使用FileSaver.js来实现w3c的saveAs()

    var lines = ["line 1,cell 11,cell 12\n","line 2,cell 21,cell 22\n"];
    var type = "text/csv;charset=utf-8";
    var blob = new Blob(lines,{"type":type});
    saveAs(blob,"download.csv");
    
  2. 使用a[download]和数据uri:

    var lines = ["line 1,cell 11,cell 12\n","line 2,cell 21,cell 22\n"];
    var type = "text/csv;charset=utf-8";
    var downloader = $('<a download href="data:'+type+','+escape(lines.join(''))+'"></a>')
        .appendTo("body")
    downloader[0].click();
    downloader.remove();
    
  3. 我的问题是我的文件可能很大:1800万行和2.5 Gb(我希望能够处理更多)。创建lines会占用太多内存并导致网站崩溃。但是没有理由将lines存储在浏览器的内存中只是为了将其保存到硬盘驱动器中。有没有办法使用javascript创建渐进式下载(换句话说,开始下载,但在我计算时保持追加行)?或者我唯一的选择是将文件作为单独的块下载,然后用户必须将它们连接在一起?

1 个答案:

答案 0 :(得分:0)

如果您使用的是HTML5,则可以尝试使用FileSytem API。有关该主题的信息,请参阅here;有关如何在客户端创建和访问文件的更实用示例,请参阅here