文件工具函数
2024年9月11日小于 1 分钟
文件自动下载
/**
* 下载文件
* @param fileUrl 文件URL
* @param fileName 文件名
*/
async function downloadFile(fileUrl: string, fileName?: string): Promise<void> {
try {
// 发送HTTP GET请求获取文件内容
const response = await fetch(fileUrl);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// 将响应体转换为Blob对象
const blob = await response.blob();
// 创建用于下载的链接元素
const url = window.URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
// 如果未提供文件名,则尝试从响应头中获取
if (!fileName) {
const contentDisposition = response.headers.get("content-disposition");
if (contentDisposition) {
const match = contentDisposition.match(/filename="?([^"]*)"?/);
if (match) {
fileName = match[1];
}
}
// 如果仍然没有文件名,则使用默认文件名
fileName = fileName || "downloaded_file";
}
// 设置下载文件名
a.download = fileName;
// 触发下载操作
document.body.appendChild(a);
a.click();
// 清理资源
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
} catch (error) {
console.error("Error downloading file:", error);
}
}