基于 Axios 的前端文件上传下载实战指南
在实际开发中,文件上传与下载是前端工程师经常遇到的需求。Axios 作为流行的 HTTP 客户端,处理二进制流时若配置不当,极易出现乱码、跨域或解析失败等问题。本文将结合实战场景,梳理从基础上传到高级进度条实现的完整流程。
核心概念:Blob 与 FormData
处理文件的核心在于理解两个对象:
- FormData:HTML5 新增 API,用于模拟表单提交。它允许将文件和普通字段混合发送,无需手动设置
Content-Type(浏览器会自动生成 boundary)。 - Blob:Binary Large Object,即二进制大对象。浏览器用它来存储内存中的二进制数据,是文件下载后的主要载体。
上传文件实战
基础版:单文件上传
最基础的上传使用 FormData 配合 POST 请求。注意不要手动设置 Content-Type,否则会导致后端无法解析 boundary。
const uploadFile = async (file) => {
const formData = new FormData();
// 第一个参数是字段名,需与后端约定
formData.append('file', file);
// 附加业务信息
formData.append('userId', '9527');
try {
const response = await axios.post('/api/upload', formData,
// 不设置 Content-Type,让 Axios 自动处理
{ headers: { 'Content-Type': undefined } }
);
console.log('上传成功:', response.data);
return response.data;
} catch (error) {
console.error('上传失败:', error);
throw error;
}
};


