Подтвердить что ты не робот

Невозможно загрузить большие данные с помощью javascript

У меня есть большие данные в виде объекта JSON в javascript. Я преобразовал его в строку, используя 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 (текст)" не может кодировать большие данные.

Я также пробовал window.open("data:attachment/txt," + encodeURIComponent(text)); Но снова моя страница разбилась по той же причине, что и encodeURIComponet не смог кодировать такую ​​большую строку.

Другой подход:. Я также думал о записи данных в файл с использованием API-интерфейса для записи файлов HTML5, но он имеет поддержку только в браузере Chrome, но мне нужно сделать эту работу для atleast firefox и хром оба.

Пример использования Я не хочу делать несколько загрузок, разбивая данные, поскольку в конце концов мне нужно иметь данные в одном файле.

И моя цель - поддерживать строку длиной примерно 10 ^ 6. Может ли кто-нибудь помочь мне, как загрузить/записать этот объем данных в один файл.

4b9b3361

Ответ 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