前端文件下载方法总结 
前端涉及到的文件下载应用场景非常广泛。本文将介绍几种常见的前端文件下载方法,并分析它们的优缺点。
1. 使用 <a> 标签 
通过 <a> 标签的 download 属性实现文件下载是最简单且常用的方法。
示例代码 
html
<a href="http://www.example.com/sample.pdf" download="sample.pdf">下载</a>说明 
- 优点:简单易用。
- 缺点:只能下载同源文件。如果是跨域资源,如图片、音视频等,浏览器会进行预览而非下载。
通过 JavaScript 实现 
javascript
const a = document.createElement('a');
a.href = 'http://www.example.com/sample.pdf';
a.download = 'sample.pdf';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);2. 使用 window.open() 
通过 window.open() 方法也可以实现类似的效果。
示例代码 
javascript
window.open('http://www.example.com/sample.pdf', '_blank');说明 
- 优点:简单,可以在新标签页中打开链接。
- 缺点:不能指定下载文件名。某些文件类型(如 .html、.xml)会被浏览器直接打开而非下载。
3. 使用 location.href 
通过改变 location.href 的值,可以触发浏览器下载或打开文件。
示例代码 
javascript
location.href = 'http://www.example.com/sample.pdf';说明 
- 优点:简单。
- 缺点:与 window.open()相似,存在相同的限制和缺点。
4. 使用 XMLHttpRequest 
通过 AJAX 请求文件内容,然后创建一个 Blob 对象来实现下载。
示例代码 
javascript
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.example.com/sample.pdf', true);
xhr.responseType = 'blob';
xhr.onload = function () {
  if (this.status === 200) {
    const blob = new Blob([this.response], { type: 'application/pdf' });
    const downloadUrl = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = downloadUrl;
    a.download = 'sample.pdf';
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(downloadUrl);
  }
};
xhr.send();说明 
- 优点:可以下载非同源文件,更灵活。
- 缺点:相对复杂,需要处理 AJAX 请求和 Blob 对象。
总结 
虽然前端文件下载方法多样,但最终都依赖于浏览器的内置下载机制。选择合适的方法需要根据具体的应用场景和需求来决定。