Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Вы можете достичь этого, используя атрибут download
для элементов <a>
. Например:
<a href="1251354216241621.txt" download="your-foo.txt">Download Your Foo</a>
Этот атрибут указывает, что файл должен быть загружен (вместо отображения, если применимо) и указывает, какое имя файла следует использовать для загруженного файла.
Вместо использования window.open()
вы можете создать невидимую ссылку с атрибутом download
и .click()
.
var str = "Name, Price\nApple, 2\nOrange, 3";
var uri = 'data:text/csv;charset=utf-8,' + str;
var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = "data.csv";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
К сожалению, это не поддерживается во всех браузерах , но добавление его не ухудшит ситуацию для других браузеров: они будут продолжать загружать файлы с бесполезными именами файлов. (Предполагается, что вы используете MIME-тип, который их браузер пытается загрузить. Если вы пытаетесь позволить пользователю загрузить файл .html
вместо его отображения, это не принесет вам никакой пользы в неподдерживаемых браузерах.)
Это не работает в последнем Chrome, я изменил это, и следующий код будет работать нормально,
$("#download_1").click(function() {
var json_pre = '[{"Id":1,"UserName":"Sam Smith"},{"Id":2,"UserName":"Fred Frankly"},{"Id":1,"UserName":"Zachary Zupers"}]';
var json = $.parseJSON(json_pre);
var csv = JSON2CSV(json);
var downloadLink = document.createElement("a");
var blob = new Blob(["\ufeff", csv]);
var url = URL.createObjectURL(blob);
downloadLink.href = url;
downloadLink.download = "data.csv";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
});
Поэтому, когда вы нажимаете кнопку download_1 id, тогда он создаст невидимую ссылку для скачивания и щелкните это. Я использовал другую функцию для подготовки js.
Функция JSON2CSV выглядит следующим образом:
function JSON2CSV(objArray) {
var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
var str = '';
var line = '';
if ($("#labels").is(':checked')) {
var head = array[0];
if ($("#quote").is(':checked')) {
for (var index in array[0]) {
var value = index + "";
line += '"' + value.replace(/"/g, '""') + '",';
}
} else {
for (var index in array[0]) {
line += index + ',';
}
}
line = line.slice(0, -1);
str += line + '\r\n';
}
for (var i = 0; i < array.length; i++) {
var line = '';
if ($("#quote").is(':checked')) {
for (var index in array[i]) {
var value = array[i][index] + "";
line += '"' + value.replace(/"/g, '""') + '",';
}
} else {
for (var index in array[i]) {
line += array[i][index] + ',';
}
}
line = line.slice(0, -1);
str += line + '\r\n';
}
return str;
}
Надеюсь, что это поможет другим:)
Решение для IE состоит в том, чтобы использовать msSaveBlob и передать имя файла.
Для решения современных браузеров это выглядит следующим образом: IE11, FF & amp; Chrome
var csvData = new Blob([arg.data], {type: 'text/csv;charset=utf-8;'});
//IE11 & Edge
if (navigator.msSaveBlob) {
navigator.msSaveBlob(csvData, exportFilename);
} else {
//In FF link must be added to DOM to be clicked
var link = document.createElement('a');
link.href = window.URL.createObjectURL(csvData);
link.setAttribute('download', exportFilename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
Здесь есть хорошее обсуждение здесь
Более короткая версия принятого сообщения (для моего случая пришлось использовать unicode)
var link = document.createElement("a");
link.href = 'data:text/csv,' + encodeURIComponent("algún texto");
link.download = "Example.csv";
link.click();
downloadLink.click();
в Google Chrome 58.0.3029.110 не запускается. Мне нужно вручную щелкнуть гиперссылку, чтобы сделать это. Любые обходные пути или не поддерживаются в указанном браузере. – Deepak Chaudhary 9 June 2017 в 04:53.click()
, и все! – Achmedzianov Danilian 13 February 2018 в 14:48