vue下载实现
Vue 下载实现方法
在 Vue 项目中实现文件下载功能可以通过多种方式完成,以下是几种常见的方法:
使用 <a> 标签实现下载
通过动态创建 <a> 标签并设置 href 和 download 属性实现下载。适用于已知文件 URL 的情况。
<template>
<button @click="downloadFile">下载文件</button>
</template>
<script>
export default {
methods: {
downloadFile() {
const link = document.createElement('a');
link.href = '文件URL';
link.download = '文件名.扩展名';
link.click();
}
}
}
</script>
通过 Blob 对象实现下载
适用于需要从后端 API 获取文件数据或动态生成文件的场景。将响应数据转换为 Blob 对象后下载。

<script>
export default {
methods: {
async downloadFile() {
const response = await fetch('API_URL');
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = '文件名.扩展名';
link.click();
window.URL.revokeObjectURL(url);
}
}
}
</script>
使用 axios 下载文件
通过 axios 请求文件数据并结合 Blob 对象实现下载。
<script>
import axios from 'axios';
export default {
methods: {
downloadFile() {
axios({
url: 'API_URL',
method: 'GET',
responseType: 'blob'
}).then(response => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.download = '文件名.扩展名';
link.click();
window.URL.revokeObjectURL(url);
});
}
}
}
</script>
处理后端返回的文件流

如果后端返回的是文件流,可以通过设置响应类型为 arraybuffer 或 blob 来处理。
<script>
export default {
methods: {
downloadFile() {
this.$http.get('API_URL', { responseType: 'arraybuffer' }).then(response => {
const blob = new Blob([response.data], { type: 'application/octet-stream' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = '文件名.扩展名';
link.click();
window.URL.revokeObjectURL(url);
});
}
}
}
</script>
使用第三方库
对于复杂的下载需求,可以使用第三方库如 file-saver 简化操作。
<script>
import { saveAs } from 'file-saver';
export default {
methods: {
downloadFile() {
fetch('API_URL').then(res => res.blob()).then(blob => {
saveAs(blob, '文件名.扩展名');
});
}
}
}
</script>
注意事项
- 确保后端正确设置响应头
Content-Disposition以支持文件下载。 - 跨域请求时需配置 CORS 或使用代理解决。
- 对于大文件下载,考虑使用分块下载或进度提示提升用户体验。
- 清理创建的 Blob URL 避免内存泄漏。
以上方法覆盖了 Vue 中常见的文件下载场景,可根据具体需求选择合适的方式实现。






