axios+formdata 上传文件

最近项目要做文件上传,作为萌新表示这种操作有点鸭梨,知之为知之不知百度知,好吧百度说formdata 好那我们就动手了

首先照着formdata文档来先new 一个对象

let formData = new FormData()
formData.append('xxx', 'yyyyy')
跑一遍没报错,好像是可以的,但是就是console直接打印是空的,看文档说要这么干:

console.log(formData.get('xxx'))

 

由于业务需要,axios配置了拦截器,在里面做了数据处理

axios.interceptors.request.use(function (config) {
    // 在发送请求之前做了坑爹的数据处理
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });
这个数据把我们的数据类型变成了Object,so,浏览器给出的是application/json,

解决办法1:

就是 重新creat一个纯净的axios请求,挂载到vue原型里,然后重新请求,这个时候发现请求成功,后台也接收到文件数据,完美!!

解决办法2:

processData:false // 告诉axios不要去处理发送的数据(重要参数)

let formData = new FormData()
formData.append('file',e.target.files[0])
this.$axios({
    url:url,
    method: 'post',
    data: formData,
    processData: false,// 告诉axios不要去处理发送的数据(重要参数)
    contentType: false,   // 告诉axios不要去设置Content-Type请求头
}).then((res)=>{
    console.log(res)
})

 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
axios中获取文件上传进度需要使用axios的onUploadProgress方法。在Vue3中,可以使用Composition API来实现。以下是一个使用axios + vue3 + vite获取文件上传进度的示例代码: 引用中的request.ts文件中的代码: ```typescript import axios, { AxiosRequestConfig } from 'axios' const request = axios.create({ baseURL: 'http://localhost:1101', timeout: 5000 }) // 请求拦截器 request.interceptors.request.use(function (config) { // 一般在这里设置token // console.log('config', config) return config }, function (err) { return Promise.reject(err) }) // 响应拦截器 request.interceptors.response.use(function (config) { return config }, function (err) { return Promise.reject(err) }) // 返回数据data export default <T = any>(config: AxiosRequestConfig) => { return request(config).then(res => { return res.data.data as T // 根据你自己的情况 }) } ``` 在Vue3组件中,可以使用Composition API来实现文件上传进度的获取。以下是一个示例代码: ```vue <template> <div> <input type="file" @change="uploadFile" /> <div v-if="progress !== null"> {{ progress }}% </div> </div> </template> <script> import { ref } from 'vue' import uploadFileApi from '@/api/uploadFile' export default { setup() { const progress = ref<number | null>(null) const uploadFile = async (event: Event) => { const file = (event.target as HTMLInputElement).files?.[0] if (!file) { return } const formData = new FormData() formData.append('file', file) await uploadFileApi({ url: '/upload', method: 'post', data: formData, onUploadProgress: (progressEvent) => { progress.value = Math.round((progressEvent.loaded / progressEvent.total) * 100) } }) progress.value = null } return { progress, uploadFile } } } </script> ``` 在上面的代码中,我们使用了ref来定义一个响应式的progress变量,用于显示上传进度。在uploadFile方法中,我们使用FormData来创建一个包含文件的表单数据,并将其作为data参数传递给uploadFileApi方法。在uploadFileApi方法中,我们使用onUploadProgress方法来获取上传进度,并将其赋值给progress变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值