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操作完成
相关推荐
雷达学弱狗2 小时前
链式法则解释上游梯度应用
开发语言·前端·javascript
爱隐身的官人3 小时前
爬虫基础学习-爬取网页项目(二)
前端·爬虫·python·学习
Jackson@ML4 小时前
使用字节旗下的TREA IDE快速开发Web应用程序
前端·ide·trea
烛阴6 小时前
解锁 TypeScript 的元编程魔法:从 `extends` 到 `infer` 的条件类型之旅
前端·javascript·typescript
前端开发爱好者7 小时前
弃用 ESLint + Prettier!快 35 倍的 AI 格式化神器!
前端·javascript·vue.js
wayhome在哪7 小时前
Cropper.js 轻松拿捏前端裁剪🤞
javascript·canvas·设计
&白帝&7 小时前
vue2和vue3的对比
javascript·vue.js·ecmascript
江东大都督周总7 小时前
rabbitmq集群
javascript·rabbitmq·ruby
vivi_and_qiao7 小时前
HTML的form表单
java·前端·html
一嘴一个橘子7 小时前
uniapp 顶部tab + 占满剩余高度的内容区域swiper
javascript·uni-app