JavaScript实现文件下载完整方案

javascript 复制代码
APIRequest.downloadRequest({
  id: row.id, // 从当前数据行获取文件唯一标识
}).then(res => {
  // 将响应数据转换为Blob对象
  const blobData = new Blob([res], {
    type: 'application/octet-stream' // 设置二进制流类型
  });
  
  // 创建临时URL
  const url = window.URL.createObjectURL(blobData);
  
  // 创建下载链接元素
  const link = document.createElement('a');
  link.href = url;
  
  // 设置下载文件名(使用数据行中的objectName属性)
  link.setAttribute('download', row.objectName || 'download_file');
  
  // 将链接添加到DOM中(部分浏览器需要元素在文档中才能触发下载)
  document.body.appendChild(link);
  
  // 模拟点击下载
  link.click();
  
  // 下载完成后移除临时元素
  setTimeout(() => {
    document.body.removeChild(link);
    // 释放URL对象
    window.URL.revokeObjectURL(url);
  }, 100);
  
  // 显示成功提示
  this.$message.success(`文件"${row.objectName}"下载成功`);
}).catch(error => {
  // 错误处理
  console.error('下载失败:', error);
  this.$message.error('文件下载失败');
});

这个扩展版本增加了以下细节:

  1. 添加了Blob的类型指定
  2. 增加了默认文件名处理
  3. 添加了URL对象的释放
  4. 加入了错误处理逻辑
  5. 完善了下载完成后的清理工作
  6. 在成功提示中显示具体的文件名
  7. 使用setTimeout确保DOM操作完成
相关推荐
Nicander43 分钟前
我给 Excalidraw 做了一个本地工作区:DrawSpace
前端·开源
linux_cfan2 小时前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
计算机魔术师3 小时前
烧掉2780亿美元还不够?OpenAI的资本豪赌让人头皮发麻
前端
IT_陈寒4 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
卡布鲁4 小时前
React useMemo 与 useCallback 完全指南:原理、场景与避坑
前端·react.js
子非鱼a4 小时前
【XSS】乌托邦·王的实验室
html·xss
碳基修炼4 小时前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
步行cgn4 小时前
Spring p 命名空间注入详解
java·前端·spring
何何____4 小时前
Vue 生命周期详解
前端·javascript
江米小枣tonylua5 小时前
TypeScript 全面の拥抱 !Prisma 8 + Electron 升级实战
前端