Javascript: экспорт больших текстовых / CSV-файлов приводит к сбою Google Chrome
У меня есть следующий код Javascript для экспорта файла CSV на стороне клиента. Однако Google Chrome вылетает каждый раз, когда я пытаюсь экспортировать большой массив. Какое ограничение допустимо для строки данных в Chrome? Возможно ли, что он превышает ограничение памяти, разрешенное в Chrome? Если строка данных слишком длинная для Chrome, как мне будет экспортировать большие файлы CSV на стороне клиента?
var csvRows = [...]; //Array with 40000 items, each item is 100 characters long.
var csvString = csvRows.join("\r\n");
var a = document.createElement('a');
a.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(csvString);
a.target = '_blank';
a.download = 'export.csv';
document.body.appendChild(a);
a.click();
(Ожидаемый размер файла составляет около 6,4 МБ)
2 ответа
Решение
Была та же проблема и решена с помощью Blob.
Например:
csvData = new Blob([csvString], { type: 'text/csv' });
var csvUrl = URL.createObjectURL(csvData);
a.href = csvUrl;
Источник: /questions/21893415/eksport-tablitsyi-html-v-csv-v-brauzere-google-chrome/21893431#21893431
Я использовал следующую функцию для загрузки CSV. Работал для меня в IE/Firefox/Chrome
function downloadFile(data, fileName) {
var csvData = data;
var blob = new Blob([ csvData ], {
type : "application/csv;charset=utf-8;"
});
if (window.navigator.msSaveBlob) {
// FOR IE BROWSER
navigator.msSaveBlob(blob, fileName);
} else {
// FOR OTHER BROWSERS
var link = document.createElement("a");
var csvUrl = URL.createObjectURL(blob);
link.href = csvUrl;
link.style = "visibility:hidden";
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}