导出前必须配置 axios 实例的 responsetype: 'blob',否则二进制流会被错误解析;需在 request.js 中统一设置 baseurl、timeout 和 responsetype,并在请求时传入参数,接收后构造 blob、生成 url 下载,同时做好错误提示与文件名 fallback。

导出前配置 Axios 实例
必须在请求发起前明确指定 responseType: 'blob',否则后端返回的二进制流会被自动转成字符串或 JSON,导致解析失败。推荐在独立文件中创建带默认配置的实例:
- 新建
src/utils/request.js,导出已配置好的 axios 实例 - 设置
baseURL和全局超时时间,避免每个请求重复写 -
关键项不能漏:
responseType: 'blob'必须写在实例配置里,或每次调用时显式传入 - 若需携带 token,可在
headers中统一添加Authorization
组合式 API 中触发导出请求
在 setup() 中使用 ref 或 reactive 管理参数,调用时传入筛选条件(如时间范围、状态、ID 列表等):
- 用
const params = reactive({ startTime: '', endTime: '', ids: [] })收集导出条件 - 点击按钮时调用
axios.get('/api/export', { params, responseType: 'blob' })(GET)或axios.post('/api/export', payload, { responseType: 'blob' })(POST) - 若后端返回的是带文件名的流,注意检查响应头:
Content-Disposition字段是否包含filename=xxx.xlsx
接收并下载 Blob 流
拿到响应数据后,不能直接用 JSON.parse,而是要构造 Blob 并生成下载链接:
- 从响应中提取
response.data(它已是 Blob 类型) - 用
new Blob([data], { type: response.headers['content-type'] || 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })包装 - 调用
window.URL.createObjectURL()创建临时 URL - 动态创建
<a></a>标签,设置href和download属性(文件名可从响应头解析,或手动指定) - 触发点击后立即移除 DOM 节点,并调用
window.URL.revokeObjectURL()释放内存
错误与边界处理
文件导出不是普通接口,失败时用户感知弱,需主动提示:
- 捕获
try/catch中的网络错误、4xx/5xx 响应 - 特别判断
response.status === 200且response.data instanceof Blob,防止后端返回错误 HTML 或 JSON 提示页被当成文件下载 - 若后端未设置
Content-Disposition,可用默认名如`导出_${Date.now()}.xlsx` - 大文件导出建议加 loading 状态和取消机制(需配合 AbortController)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










