文件流/oss地址导出文件自定义命名
1.通过接口请求返回blob文件流的方式导出文件自定义文件名
const export= async () => {
exportLoading.value = true;
try {
// 调用导出接口,传递搜索条件
const blobAxiosResponse:any = await downloadTemplate({ type: 1 });
// 创建下载链接
const link = document.createElement('a');
const blobUrl = URL.createObjectURL(blobAxiosResponse);
link.href = blobUrl;
link.download = 'aaa.xlsx'; // 设置文件名
document.body.appendChild(link);
link.click();
// 释放 URL 对象
URL.revokeObjectURL(blobUrl);
document.body.removeChild(link);
} catch (error) {
console.error('导出失败:', error);
proxy?.$modal.msgError('导出失败');
} finally {
exportLoading.value = false; // 确保加载状态被重置
}
};
2.通过oss地址下载文件重命名文件
async function downloadAll(urls, taskName) {
for (let i = 0; i < urls.length; i++) {
try {
const url = urls[i];
// 从URL中提取文件扩展名
const fileExtension = url.split('.').pop() || 'xlsx';
// 根据任务类型生成文件名
const fileName = `${taskName}.${fileExtension}`;
// 通过fetch获取文件blob
const response = await fetch(url);
if (!response.ok) {
throw new Error(`下载失败: ${response.status}`);
}
const blob = await response.blob();
// 创建下载链接
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = fileName;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
// 清理URL对象
URL.revokeObjectURL(a.href);
// 等待800ms再下载下一个
await new Promise(resolve => setTimeout(resolve, 800));
} catch (error) {
console.error('下载文件失败:', error);
const errorMessage = error instanceof Error ? error.message : '未知错误';
proxy?.$modal.msgError(`下载第${i + 1}个文件失败: ${errorMessage}`);
}
}
}
您还未登录, 登录 后可进行评论
发表
还没有评论哦,来抢个沙发吧!