vue文件上传需用formdata构建载荷、axios实例统一配置、组件解耦逻辑;禁用手动设content-type,通过onuploadprogress显示进度,前置校验类型/大小,用url.createobjecturl预览,支持取消上传。

Vue 文件上传交互结合 Axios 封装,核心在于三点:用 FormData 构建二进制载荷、用 Axios 实例统一管理请求配置、在组件中解耦选择/预览/上传逻辑。不写死 URL、不裸调 axios.post,才能应对接口变多、token 更新、错误提示风格统一等真实需求。
封装一个支持文件上传的 Axios 实例
避免每个组件都 import axios 再拼 baseURL 和 headers。推荐在 src/api/upload.js 中创建专用实例:
- 设置
baseURL和超时时间,比如https://api.example.com/v1 - 禁用默认的
Content-Type自动设置(因为 FormData 会自动带 boundary) - 在请求拦截器里注入 token(若需):
config.headers.Authorization = 'Bearer ' + getToken() - 响应拦截器统一处理 4xx/5xx,比如跳登录页或弹全局提示
组件内正确构造 FormData 并传入请求
不要手动设 headers: { 'Content-Type': 'multipart/form-data' } —— 这会破坏浏览器自动生成的 boundary,导致后端解析失败。正确做法是:

