Невозможно загрузить переменную в файл в любом браузере, кроме Chrome, используя AngularJS [duplicate]

Если вы хотите распечатать, оцените контент Array, который вы можете использовать Arrays.toString

jshell> String[] names = {"ram","shyam"};
names ==> String[2] { "ram", "shyam" }

jshell> Arrays.toString(names);
$2 ==> "[ram, shyam]"

jshell> 
73
задан Paul 24 July 2013 в 16:10
поделиться

4 ответа

Всегда есть атрибут HTML5 download :

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

Если атрибут имеет значение, это значение будет использоваться в качестве предварительно заполненного имени файла в приглашении «Сохранить» который открывается, когда пользователь нажимает на ссылку.

var A = [['n','sqrt(n)']];

for(var j=1; j<10; ++j){ 
    A.push([j, Math.sqrt(j)]);
}

var csvRows = [];

for(var i=0, l=A.length; i<l; ++i){
    csvRows.push(A[i].join(','));
}

var csvString = csvRows.join("%0A");
var a         = document.createElement('a');
a.href        = 'data:attachment/csv,' +  encodeURIComponent(csvString);
a.target      = '_blank';
a.download    = 'myFile.csv';

document.body.appendChild(a);
a.click();

FIDDLE

Проверено в Chrome и Firefox, отлично работает в новейших версиях (по состоянию на июль 2013 года) . Также работает в Opera, но не устанавливает имя файла (по состоянию на июль 2013 года) . Кажется, что не работает в IE9 (большой сюрприз) (по состоянию на июль 2013 года) .

Обзор того, какие браузеры поддерживают атрибут загрузки, можно найти Здесь Для неосновных браузеров необходимо установить соответствующие заголовки на сервере.


По-видимому, есть взломать IE10 и IE11 , что не поддерживаем атрибут download (однако, Edge) .

var A = [['n','sqrt(n)']];

for(var j=1; j<10; ++j){ 
    A.push([j, Math.sqrt(j)]);
}

var csvRows = [];

for(var i=0, l=A.length; i<l; ++i){
    csvRows.push(A[i].join(','));
}

var csvString = csvRows.join("%0A");

if (window.navigator.msSaveOrOpenBlob) {
    var blob = new Blob([csvString]);
    window.navigator.msSaveOrOpenBlob(blob, 'myFile.csv');
} else {
    var a         = document.createElement('a');
    a.href        = 'data:attachment/csv,' +  encodeURIComponent(csvString);
    a.target      = '_blank';
    a.download    = 'myFile.csv';
    document.body.appendChild(a);
    a.click();
}
154
ответ дан adeneo 4 September 2018 в 09:32
поделиться

Как только я упаковал JS-код, выполнив это в крошечную библиотеку:

https://github.com/AlexLibs/client-side-csv-generator

Код, документация и демонстрационная / игровая площадка предоставлены на Github.

Наслаждайтесь:)

Приглашения по запросу приветствуются.

7
ответ дан Alexander 4 September 2018 в 09:32
поделиться

См. ответ adeneo, но не забудьте encodeURIComponent!

a.href     = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csvString);

Кроме того, мне нужно было сделать «\r\n» не просто «\n» для разделителя строк.

var csvString = csvRows.join("\r\n");

Пересмотренная скрипка: http://jsfiddle.net/7Q3c6/

15
ответ дан Brock Adams 4 September 2018 в 09:32
поделиться

Ответ на @adeneo работает для Firefox и хром ... Для IE можно использовать ниже.

if (window.navigator.msSaveOrOpenBlob) {
  var blob = new Blob([decodeURIComponent(encodeURI(result.data))], {
    type: "text/csv;charset=utf-8;"
  });
  navigator.msSaveBlob(blob, 'FileName.csv');
}

24
ответ дан Manu Sharma 4 September 2018 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: