业务场景说明:
1.后端提供了一个post的接口,返回xls文件。这个接口需要认证,也需要通过body传参数。
2. 前端调用这个post接口,并下载文件。
实现方式有很多种,通过原生的 fetch、XMLHttpRequest 和 axios 组件都可以。不能使用 jquery封装的ajax,因为它不能处理Blob类型的数据。文章来源:https://www.toymoban.com/news/detail-556344.html
下面的例子是在vue中用axios中实现下载一个post请求返回的excel文件的例子。很简单。文章来源地址https://www.toymoban.com/news/detail-556344.html
<template>
<div>
<button @click="downloadData">下载数据</button>
</div>
</template>
<script>
import axios from "axios";
export default {
methods: {
async downloadData() {
try {
const response = await axios.post(
"/api/download/xls",
{ type: "org", minScore: 5 },
{
headers: {
Authorization:
"Bearerx5sDSKoevvexx1aiYQzMHbNkNQfunCownkDKed8U5BShTve2bSCgT",
},
responseType: "blob",
}
);
// 从响应中获取文件数据
const fileData = response.data;
// 创建一个Blob对象
const blob = new Blob([fileData], { type: "application/octet-stream" });
// 生成文件URL
const downloadUrl = URL.createObjectURL(blob);
// 创建一个a标签
const link = document.createElement("a");
link.href = downloadUrl;
// 设置下载文件的名称
link.setAttribute("download", "data.xlsx");
// 将a标签添加到页面上
document.body.appendChild(link);
// 触发a标签的点击事件,开始下载
link.click();
// 下载完成后,移除a标签
document.body.removeChild(link);
} catch (error) {
console.error("下载数据时发生错误:", error);
}
},
},
};
</script>
到了这里,关于下载post请求返回的文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!