import { userStatus } from '@xtc/user-status';
/**
* 下载
* @param url 地址
* @param params 查询参数
* @param fileName 文件名称,可不填
*/
export async function download(url: string, params?: object, fileName?: string) {
if (params) {
url += '?' + new URLSearchParams(<any>params).toString();
}
let headers = new Headers();
const token = await userStatus.getToken();
headers.append('Authorization', `Bearer ${token}`);
fetch(url, {
method: 'get',
headers
}).then((res => {
let disposition = res.headers.get('content-disposition')
let filename = disposition?.replace('attachment;filename=', '')
return blobAndFileName(res.blob(), filename)
}))
.then((data: any) => {
const link = document.createElement('a');
var objectURL = URL.createObjectURL(data.blob);
link.href = objectURL
if (fileName) {
link.download = fileName
} else {
link.download = decodeURIComponent(data.fileName)
}
link.click()
URL.revokeObjectURL(objectURL)
})
}
/**
* 获取blob和文件名称
* @param blob blob函数获取blob对象
* @param fileName 文件名称
* @returns Promise的blob和文件名称
*/
async function blobAndFileName(blob: Promise<any>, fileName: any) {
let blobData = await blob
return { blob: blobData, fileName }
}
fetch下载
最新推荐文章于 2024-06-21 12:13:54 发布