5月29日 22:54

axios 文件上传下载怎么做?进度监控和 CSRF 防护如何实现?

axios 的高级特性主要有 文件上传下载、进度监控、CSRF 防护、实例封装

文件上传: 使用 FormData 构建请求体,设置 Content-Type: multipart/form-data(axios 自动识别 FormData 并设置)。分片上传需手动将文件切片(Blob.slice),逐片上传并在后端合并。上传示例:const form = new FormData(); form.append('file', fileBlob); axios.post('/upload', form)

文件下载: 配置 responseType: 'blob' 获取二进制数据,通过 URL.createObjectURL(blob) 创建临时链接,触发 <a> 标签下载。大文件下载注意内存,可用流式处理(Node 环境)。

进度监控: 上传用 onUploadProgress,下载用 onDownloadProgress,回调参数包含 loadedtotal,计算百分比:Math.round(loaded / total * 100)。底层基于 XMLHttpRequest 的 progress 事件,Node 环境不支持。

CSRF 防护: 配置 xsrfCookieNamexsrfHeaderName,axios 自动从 Cookie 读取 XSRF-Token 并写入请求头。后端需在登录时设置 Set-Cookie: XSRF-TOKEN=xxx; Path=/

实例封装: axios.create() 创建独立实例,拥有自己的拦截器、默认配置和适配器,适合多 API 服务的项目隔离配置。

追问:

  1. 分片上传如何实现断点续传?需要后端配合什么接口?
  2. onUploadProgress 在 Node 环境下为什么不生效?有替代方案吗?
  3. 大文件下载如何避免浏览器内存溢出?
  4. axios.create 创建的实例和全局 axios 对象的拦截器是共享的吗?
  5. XSRF-Token 的 Cookie 为什么不能设 HttpOnly?这和 XSS 风险如何权衡?
标签:JavaScript前端Axios