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) } }