首页 > 编程 > JavaScript > 正文

vue实现axios图片上传功能

2019-11-19 11:00:13
字体:
来源:转载
供稿:网友

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    });   }  }

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表