//step1:创建xmlhttprequest var oAjax = null; if (window.XMLHttpRequest) { oAjax = new XMLHttpRequest(); } else { oAjax = new ActiveXObject("Microsoft.XMLHTTP"); } //step2:连接服务器 oAjax.open('post', url, true); //step3:设置请求header,可根据实际场景按需设置 oAjax.setRequestHeader("Content-type","application/json"); //step4:设置数据请求格式 oAjax.responseType = "arraybuffer"; //step5:接收服务器的返回 oAjax.send(JSON.stringify(data)); oAjax.onload = function(){ if (this.status == 200) { //处理下载逻辑,下面详解 //第三个参数为处理文件类型 downfile(this.response,'文件名称',{}) } }
1、使用插件FileSaver.js处理下载
1 2 3 4 5 6 7 8 9 10 11
//https://github.com/eligrey/FileSaver.js/ var FileSaver = require('file-saver'); functiondownfile(filestream){ var file = new File([filestream],filename, {type: "application/excel; charset=UTF-8"}); if(file.size && file.size > 0){ FileSaver.saveAs(file); }else{ //给出不能下载提示 } }
里面的type类型和文件名称也可以通过服务端的返回头responseheader处理
1 2 3 4 5 6 7 8 9 10
var filename = ""; var disposition = xhr.getResponseHeader('Content-Disposition'); if (disposition && disposition.indexOf('attachment') !== -1) { var filenameRegex = /filename[^;=]*=((['"]).*?2|[^;]*)/; var matches = filenameRegex.exec(disposition); if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, ''); } var type = xhr.getResponseHeader('Content-Type'); var file = new File([filestream],filename, type); FileSaver.saveAs(file);
functiondownfile(filestream){ var blob = new Blob([filestream], {type: "application/excel; charset=UTF-8"}); var URL = window.URL || window.webkitURL; var downloadUrl = URL.createObjectURL(blob); window.location = downloadUrl var a = document.createElement("a");