refactor: 优化文件下载功能和移除预览点击

This commit is contained in:
wangqiao
2025-08-30 11:52:36 +08:00
parent 966c5feb5e
commit 3153a35daf
2 changed files with 44 additions and 9 deletions

View File

@ -58,7 +58,8 @@
<div v-for="item in detail?.files" :key="item.id" class="flex items-center justify-between border-b-[1px] border-b-[#eee] border-b-solid py-[10px]"> <div v-for="item in detail?.files" :key="item.id" class="flex items-center justify-between border-b-[1px] border-b-[#eee] border-b-solid py-[10px]">
<!-- <img src="~/assets/images/avater.png" alt="" srcset="" class="h-30px w-30px" /> --> <!-- <img src="~/assets/images/avater.png" alt="" srcset="" class="h-30px w-30px" /> -->
<div> <div>
<span class="ml-[10px] cursor-pointer" @click="handleDownloadPreview(item)">{{ item.title }}</span> <!-- <span class="ml-[10px] cursor-pointer" @click="handleDownloadPreview(item)">{{ item.title }}</span> -->
<span class="ml-[10px]">{{ item.title }}</span>
<span v-if="item.size" class="ml-[200px] color-[#999]">{{ item.size || '-' }}</span> <span v-if="item.size" class="ml-[200px] color-[#999]">{{ item.size || '-' }}</span>
</div> </div>
<el-button <el-button

View File

@ -88,15 +88,49 @@ export const formatNumber = (value?: number, decimals = 0) => {
* @param url 文件地址 * @param url 文件地址
* @param filename 文件名 * @param filename 文件名
*/ */
export const downloadFile = (url: string, filename: string) => { export const downloadFile = async (url: string, filename: string) => {
const a = document.createElement('a') if (!process.client) return;
a.href = url
a.download = filename || 'download' // 设置下载的文件名 try {
document.body.appendChild(a) const response = await fetch(url);
a.click() const reader = response.body.getReader();
document.body.removeChild(a) const contentLength = +response.headers.get('Content-Length');
} let receivedLength = 0;
const stream = new ReadableStream({
async start(controller) {
while (true) {
const { done, value } = await reader.read();
if (done) {
controller.close();
return;
}
receivedLength += value.length;
const progress = (receivedLength / contentLength * 100).toFixed(2);
console.log(`下载进度: ${progress}%`);
controller.enqueue(value);
}
}
});
const blob = await new Response(stream).blob();
const objectURL = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = objectURL;
a.download = filename || 'download';
a.style.display = 'none';
document.body.appendChild(a);
a.click();
URL.revokeObjectURL(objectURL);
document.body.removeChild(a);
} catch (error) {
console.error('下载失败:', error);
// 可添加错误提示逻辑
}
}
/** /**
* 判断传入的参数是否为数组 * 判断传入的参数是否为数组