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操作完成
相关推荐
Alice-YUE20 分钟前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
是上好佳佳佳呀2 小时前
【前端(十一)】JavaScript 语法基础笔记(多语言对比)
前端·javascript·笔记
莎士比亚的文学花园2 小时前
Linux驱动开发(3)——设备树
开发语言·javascript·ecmascript
CDN3602 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
之歆2 小时前
Day07_CSS盒子模型 · 样式继承 · 用户代理样式
前端·css
01漫游者3 小时前
JavaScript函数与对象增强知识
开发语言·javascript·ecmascript
DanCheOo3 小时前
AI 应用的安全架构:Prompt 注入、数据泄露、权限边界
前端·人工智能·prompt·安全架构
We་ct4 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
weixin_427771614 小时前
前端调试隐藏元素
前端
threelab4 小时前
Three.js 代码云效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能