1.大多数时候我们都是通过get实现下载,那如果需要通过post实现呢?下面就来记录一下post实现下载的代码:
//url 请求地址
//obj 传入的参数
downloadExcel(url, obj) {
let tempForm = document.createElement('form');
// var token = window.token || ''
// if (url && token) {
// if (url.indexOf('?') !== -1) {
// url = url + '&token=' + token;
// } else {
// url = url + '?token=' + token;
// }
// }
tempForm.action = url;
tempForm.method = 'post';
tempForm.onsubmit = "return false";
tempForm.style.display = 'none';
for (let st in obj) {
if (obj.hasOwnProperty(st)) {
let opt = document.createElement('textarea');
opt.name = st;
opt.value = obj[st];
tempForm.appendChild(opt);
}
}
document.body.appendChild(tempForm);
tempForm.submit();
return tempForm;
}
2.后端返回的Base64位如何转换
// base64转换
export function base64ToArrayBuffer(base64) {
var binaryString = window.atob(base64);
var binaryLen = binaryString.length;
var bytes = new Uint8Array(binaryLen);
for (var i = 0; i < binaryLen; i++) {
var ascii = binaryString.charCodeAt(i);
bytes[i] = ascii;
}
return bytes;
}
export function saveByteArray(reportName, byte) {
const link = document.createElement("a"); // 创建a标签
const blob = new Blob([byte], {
type: "application/vnd.ms-excel;charset=utf-8",
}); // response就是接口返回的文件流
const objectUrl = URL.createObjectURL(blob);
link.href = objectUrl;
link.download = reportName;
link.click(); // 下载文件
URL.revokeObjectURL(objectUrl);
}
// 应用
const sampleArr = base64ToArrayBuffer(this.failData.fileByte); // 这里先调用base64ToArrayBuffer将base64转为二进制流
saveByteArray(文件名称, sampleArr); // 然后将文件名称和数据流直接给到saveByteArray方法进行下载