Это не так просто сделать, но есть сценарий, который может вам помочь.Я обычно использую FileSaver.js , чтобы сделать это, это с открытым исходным кодом.FileSaver помогает решить проблемы несовместимости браузера, он также хорошо протестирован.
Вот фрагмент кода, который я поднял из своего текущего проекта.Это простой javascript и не требует jQuery или чего-либо еще.
В этом примере имя файла жестко закодировано как «my_excel_file.xlsx», но вы можете получить имя файла из API, если вы выставите правильный заголовок изапи.Я думаю, что я ответил, как справиться с этим где-то в SO.
<html>
<head>
<script src="FileSaver.min.js"></script>
<script>
function download() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://your.url", true);
xhr.setRequestHeader("Content-type","application/json");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.setRequestHeader("Accept", "application/octet-stream");
//xhr.setRequestHeader("Authorization", "Bearer ......");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var blob = new Blob([xhr.response], {type: "octet/stream"});
var fileName = "my_excel_file.xlsx";
saveAs(blob, fileName);
}
}
xhr.responseType = "arraybuffer";
xhr.send();
}
</script>
</head>
<body>
<button onclick="javascript:download()">Download Excel File</button>
</body>
</html>