46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
export function downloadTextAsFile(text: string, filename: string) {
|
|
// 直接创建 File 对象(比 Blob 更高级)
|
|
const file = new File([text], filename, { type: 'text/plain' });
|
|
|
|
// 创建下载链接
|
|
const url = URL.createObjectURL(file);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = filename;
|
|
|
|
// 触发下载
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
|
|
// 清理
|
|
requestIdleCallback(() => {
|
|
document.body.removeChild(a);
|
|
URL.revokeObjectURL(a.href);
|
|
});
|
|
}
|
|
|
|
export const downloadBlob = (response: any) => {
|
|
try {
|
|
// 从响应头获取文件名
|
|
const contentDisposition = response.headers['content-disposition'];
|
|
let fileName = 'download.zip';
|
|
if (contentDisposition) {
|
|
const fileNameMatch = contentDisposition.match(/filename="?(.+)"/);
|
|
if (fileNameMatch && fileNameMatch[1]) {
|
|
fileName = fileNameMatch[1];
|
|
}
|
|
}
|
|
|
|
const url = window.URL.createObjectURL(new Blob([response.data]));
|
|
const link = document.createElement('a');
|
|
link.href = url;
|
|
link.setAttribute('download', fileName);
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
link.remove();
|
|
window.URL.revokeObjectURL(url);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
};
|