vue实现axios图片上传功能


Posted in Javascript onAugust 20, 2019

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

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

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

Javascript 相关文章推荐
js 获取服务器控件值的代码
Mar 05 Javascript
原生js实现给指定元素的后面追加内容
Apr 10 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
jQuery+PHP星级评分实现方法
Oct 02 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
微信小程序 form组件详解及简单实例
Jan 10 Javascript
javaScript日期工具类DateUtils详解
Dec 08 Javascript
详解VueJS应用中管理用户权限
Feb 02 Javascript
Vue组件为什么data必须是一个函数
Jun 11 Javascript
vue路由分文件拆分管理详解
Aug 13 Javascript
JS实现炫酷轮播图
Nov 15 Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 #Javascript
vue+element-ui+axios实现图片上传
Aug 20 #Javascript
vue element upload实现图片本地预览
Aug 20 #Javascript
JS中的算法与数据结构之集合(Set)实例详解
Aug 20 #Javascript
Vue + Element UI图片上传控件使用详解
Aug 20 #Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
Aug 20 #Javascript
ES6中Symbol、Set和Map用法详解
Aug 20 #Javascript
You might like
php的memcache类分享(memcache队列)
2014/03/26 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
深入理解vue中的$set
2017/06/01 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
vue实现购物车加减
2020/05/30 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
python简单读取大文件的方法
2016/07/01 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
Python三级菜单的实例
2017/09/13 Python
pandas 将索引值相加的方法
2018/11/15 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
北京大学自荐信范文
2014/01/28 职场文书
就业表自我评价分享
2014/02/06 职场文书
党员创先争优承诺书
2014/03/26 职场文书
领导班子四风表现材料
2014/08/23 职场文书
银行竞聘报告范文
2014/11/06 职场文书
党员干部廉政承诺书
2015/04/28 职场文书