前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

前端文件下载完全指南:10+种方案对比与实战代码

首页
2023-06-08 14:40:12
Front-End
JavaScript文件下载前端开发Blobaxios

在前端开发中,文件下载是极其常见的需求。从简单的图片下载到大型文件处理,从静态资源到动态接口数据,不同场景需要不同的实现方案。

本文将全面总结前端文件下载的各种实现方式,包括基础方案、进阶方案和高级方案,并给出完整的代码示例,帮助你根据具体场景选择最适合的实现方式。

# 一、基础下载方案

# 1. a标签下载

最简单直接的下载方式,适合静态资源或可直接访问的URL。

// 基础下载 - 触发浏览器默认行为
const link = document.createElement('a')
link.href = 'https://example.com/file.pdf'
link.click()

// 带下载文件名 - 使用download属性
const link = document.createElement('a')
link.href = 'https://example.com/file.pdf'
link.download = '自定义文件名.pdf' // 告诉浏览器触发下载
document.body.appendChild(link)
link.click()
document.body.removeChild(link)

// 注意事项:download属性有跨域限制
// 仅适用于同源URL或 blob:、data: URL
@前端进阶之旅: 代码已经复制到剪贴板

适用场景:同源静态文件下载、可控服务器资源

# 2. location.href 跳转

最简单的下载方式,浏览器会直接打开或下载目标资源。

// 直接跳转下载
location.href = 'https://example.com/file.pdf'

// 优点:简单直接
// 缺点:会跳转当前页面,无法获取下载进度
@前端进阶之旅: 代码已经复制到剪贴板

适用场景:不关心下载状态、一次性下载

# 3. window.open 打开

通过新窗口打开资源,适合浏览器直接支持预览的文件类型。

// 新窗口打开下载
window.open('https://example.com/file.pdf', '_blank')

// 适用于PDF、图片等浏览器可直接预览的文件
@前端进阶之旅: 代码已经复制到剪贴板

适用场景:需要浏览器预览的文件、需要在新标签页查看


# 二、Blob文件下载

# 4. fetch + Blob

处理接口返回的二进制数据,灵活控制下载行为。

fe
  • 一、基础下载方案
    • 1. a标签下载
    • 2. location.href 跳转
    • 3. window.open 打开
  • 二、Blob文件下载
    • 4. fetch + Blob
    • 5. axios + Blob
  • 三、带进度下载
    • 6. XMLHttpRequest 下载
    • 7. axios + onDownloadProgress
  • 四、特殊场景下载
    • 8. Base64图片下载
    • 9. 纯文本/JSON下载
    • 10. 隐藏iframe下载
  • 五、高级下载方案
    • 11. 大文件分片下载
    • 12. 流式下载(适合超大文件)
  • 六、方案对比总结
  • 最佳实践建议

← Webpack 5 核心特性深度总结 构建性能与优化实践完全指南拯救磁盘空间 为什么pnpm是更好的包管理工具 →