import { ElMessage } from 'element-plus'
|
import { saveAs } from 'file-saver'
|
|
/**
|
* 保存接口返回的二进制文件;若后端实际返回的是错误 JSON,则提示错误而不是存成坏文件。
|
* @param {Blob} data 请求返回的 blob
|
* @param {string} filename 下载文件名
|
* @param {string} mime 文件类型
|
*/
|
export function saveBlobOrShowError(data, filename, mime = 'application/octet-stream') {
|
const reader = new FileReader()
|
reader.readAsText(data, 'utf-8')
|
reader.onload = () => {
|
const text = (reader.result || '').trim()
|
if (text.startsWith('{') || text.startsWith('[')) {
|
let msg = '导出失败'
|
try {
|
msg = JSON.parse(text).msg || msg
|
} catch (e) {
|
// 非标准错误结构,保留默认提示
|
}
|
ElMessage.error(msg)
|
} else {
|
saveAs(new Blob([data], { type: mime }), filename)
|
}
|
}
|
reader.onerror = () => {
|
saveAs(new Blob([data], { type: mime }), filename)
|
}
|
}
|