一开始的源代码
print(this.tableData,this.form.orderNumb).then(res=>{
if (res.status == "200") {
var blob = new Blob([res], {type: "application/pdf;charset=UTF-8",});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
document.body.appendChild(link);
link.download = 'file.pdf';
link.click();
URL.revokeObjectURL(link.href); // 释放URL 对象
document.body.removeChild(link);
// this.$message.success(res.data.msg)
})
axios里
export function print(List,numb){
return request({
responseType: 'blob',
url:'/print/code',
method:'post',
data:{ List, numb},
})
}
我在axios里面也都添加responseType为blob,一直可以正常导出但是导出的文件一直损坏。想会不会是后端返回的数据流有问题,测试了下postman的导出和swagger的导出,内容都能正常显示。网上有说因为mock.js会影响。我这里没用mockjs。
新的改变
后来在控制台打印了blob文件,发现前面代码中的blob文件大小只有15,
后来试着打印了下res.data,发现文件大小不一样!这里的size是30632,然后我把blob赋值为res.data后,下载的pdf文件即可正常显示了。
var blob = new Blob([res.data], {type: "application/pdf;",});