Невозможно загрузить большие данные с помощью 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. Может ли кто-нибудь помочь мне, как загрузить/записать этот объем данных в один файл.
Ответы
Ответ 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