前端GET/POST请求下载文件多种方式代码示例
前端发起 GET/POST 请求,获取后端返回的文件数据,并触发浏览器下载,是常见的业务场景。本文将详细介绍几种常用的实现方式,并提供代码示例。
XMLHttpRequest 是浏览器原生的 API,可以用来发送各种类型的 HTTP 请求。
function downloadFile(url) {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob'; // 指定返回类型为 Blob
xhr.onload = function() {
if (this.status === 200) {
const blob = this.response;
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download 1. github.com
github.com = '文件名.xlsx'; // 设置下载文件名
link.click();
window.URL.revokeObjectURL(link.href); // 释放 URL 对象
} else {
console.error('下载失败');
}
};
xhr.send();
}
function downloadFileByPost(url, data) {
const xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.responseType = 'blob';
xhr.setRequestHeader('Content-Type', 'application/ 1. github.com
github.comjson'); // 设置请求头
xhr.onload = function() {
// ... 同上
};
xhr.send(JSON.stringify(data));
}
Fetch API 是 XMLHttpRequest 的替代方案,提供了更加现代化的接口。
JavaScript
function downloadFileWithFetch(url) {
fetch(url)
.then(response => response.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download 1. www.framer.community
www.framer.community = '文件名.xlsx';
link.click();
window.URL.revokeObjectURL(url);
})
.catch(error => {
console.error('下载失败', error);
});
}
Axios 是一个基于 Promise 的 HTTP 客户端,可以简化异步请求。
JavaScript
import axios from 'axios';
function downloadFileWithAxios(url) {
axios({
method: 'get',
url,
responseType: 'blob'
})
.then(response => {
const blob = response.data;
// ... 同上
})
.catch(error => {
console.error('下载失败', error);
});
}
Vue、React 等框架通常提供了自己的请求库,可以直接使用。
'blob'
,表示返回二进制数据。a
标签,设置 href
和 download
属性,模拟点击下载。Content-Type
。Content-Type
。本文介绍了前端发起 GET/POST 请求下载文件的几种常见方式,包括 XMLHttpRequest、Fetch API、Axios 等。选择哪种方式取决于项目需求和开发者的偏好。在实际开发中,可以根据具体场景进行灵活组合和优化。
更多优化建议:
onprogress
事件来显示下载进度。希望这份回答能帮助你更好地理解前端文件下载的实现方式。