11

我在 javascript 中有大量 JSON 对象形式的数据。我已使用 JSON.stringify() 将其转换为字符串。现在我的用例是在一个文本文件中向用户提供这个大字符串。所以为此我写了下面的代码。

HTML 代码

  <button id='text_feed' type="submit">Generate ION Feed</button>

  <a href="data:attachment/txt" id="textLink" download="feed.txt"></a>

Javascript代码

 var text = //huge string  

 $("#text_feed").click(function() {
        _generateFeed(text);
 });

 var _generateFeed = function(text) {
    //some code here
    $("#textLink").attr("href",
                          "data:attachment/txt," + encodeURIComponent(text))  [0].click();
    });
 }; 

问题:当字符串长度很小时,我可以下载数据。但是当字符串长度变长 (> 10^5) 时,我的页面会崩溃。发生这种情况是因为“encodeUriComponet(text)”无法对大数据进行编码。

我也试过window.open("data:attachment/txt," + encodeURIComponent(text)); 但是我的页面又一次崩溃了,因为 encodeURIComponet 无法编码这么大的字符串。

另一种方法:我也在考虑使用 HTML5 File write API 将数据写入文件,但它仅在 Chrome 网络浏览器中具有支持,但我需要至少让 firefox 和 chrome 都能使用。

用例 我不想通过破坏数据来进行多次下载,因为我最终需要将数据放在一个文件中。

我的目标是支持大约 10^6 长度的字符串。谁能帮助我如何将大量数据下载/写入单个文件。

4

1 回答 1

1

来自 OP

我解决了它如下。

var _generateFeed = function(text) {
    /*some code here*/
    var url = URL.createObjectURL( new Blob( [text], {type:'text/plain'} ) );
    $("#textLink").attr("href",url)[0].click();
}; 

笔记:

  • URL.createObjectURL()与现代浏览器和 IE10+ 兼容,但它是一种不稳定的实验性技术。
  • 使用 URL.createObjectURL() 创建的对象“必须在不再需要它们时通过调用URL.revokeObjectURL()来释放它们。 ” - MDN
于 2016-06-30T13:39:34.540 回答