欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue实现axios图片上传功能

程序员文章站 2022-07-06 18:11:16
vue中实现图片上传,我这里使用的是formdata通过axios向后台发送请求,从而实现图片的上传。 在发起请求的axios中一般用qs进行序列化,但是序列化之后,fo...

vue中实现图片上传,我这里使用的是formdata通过axios向后台发送请求,从而实现图片的上传。

在发起请求的axios中一般用qs进行序列化,但是序列化之后,formdata就传送失败,所以要区别传送的数据类型。

经过多次摸索总结了以下经验,以供参考。

首先创建一个文件夹services ,里面有两个文件 index.js 和 api.js。

我们的qs序列化和数据拦截写在index.js中

import axios from "axios";
import config from "@/config";
import router from "@/router";
import validate from "@/util/validate";
import qs from "qs";
const request = axios.create({
 baseurl: config.hosturl,
 timeout: 52000,
 transformrequest: [
  (data) => {
   return data instanceof formdata ? data : qs.stringify({ //此处的data类型判断为重要点,
    ...data
   });
  }
 ]
});
request.interceptors.request.use( //请求拦截
 config => {
  return config;
 },
 error => promise.error(error)
);

request.interceptors.response.use(// 响应拦截器
 async function (res) {
   if (res.status === 200) {
    return promise.resolve(res.data);
   } else {    
    return promise.reject(res.data);
   }
  },
  async function (error) {
   const {
    response
   } = error;
   if (response) {   
    return promise.reject(response);
   } else {    
   }
  }
);
export default request;

写好上面的代码在api.js 请求接口就无须做任何操作了,下面示例:

async upimgs(files) { // 我的相册图片上传    
    return (await request.post('/basis/uploadfile', files)).response
     },

页面调用接口

async file_up(event) {
   //图片预览
   try {
    let res = null;
    this.file = [...event.target.files];
    for (let i = 0, f; (f = this.file[i]); i++) {
     if (i >= 8 || this.imgs.length >= 8) {
      return;
     }
     let fileimg = new formdata();
     fileimg.append("file", f);
     res = await this.$api.upimgs(fileimg); //这里是调用api处, 此处为多图上传,供参考
     if (res.result) {
      this.imgs.push(res.result.absolutefilepath);
     }
    }
   } catch (err) {
    this.$toast({
     message: err.message,
     duration: 1200
    });
   }
  }

是不是很简单呀!反正我是实现了,有问题可以讨论下哦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。