blob文件流
调用接口时指定返回类型blob
responseType: "blob",
返回文件流通过插件打开窗口(file-saver)
file-saver 插件
import { saveAs } from "file-saver";
saveAs(blobFile, fname);
在axios中处理blob文件流返回报错
if (error.response.config.responseType === "blob") {
data = await resolveBlobRsp(data);
}
function resolveBlobRsp(data: any) {
const reader = new FileReader();
return new Promise((resolve) => {
reader.onload = (e) => {
if (e.target && typeof e.target.result === "string") {
let errData = JSON.parse(e.target.result);
resolve(errData);
} else {
resolve(null);
}
};
reader.readAsText(data);
});
}
需要从返回的返回头里面获取文件名
axios接口异步请求处理时间得钩子responseHook
declare module "axios" {
interface AxiosRequestConfig {
warn?: boolean;
responseHook?: (res: AxiosResponse) => void;
}
}
axios.interceptors.response.use(
sync (response) => {
const { config } = response;
if (config?.responseHook) {
config.responseHook(response);
}
}
)
{
responseType: "blob",
responseHook: (rsp) => {
exportTitle = getExportTitle(rsp, "***.xlsx");
},
}
export function getExportTitle(rsp: AxiosResponse<any>, defaultTitle: string) {
let exportTitle =
rsp.headers["content-disposition"].split("=")?.[1] ?? defaultTitle;
exportTitle = decodeURI(exportTitle);
return exportTitle;
}