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 相关文章推荐
取选中的radio的值
Jan 11 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
Jun 25 Javascript
用JS实现3D球状标签云示例代码
Dec 01 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
浏览器中url存储的JavaScript实现
Jul 07 Javascript
jQuery取得iframe中元素的常用方法详解
Jan 14 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
Sep 05 Javascript
vue中各组件之间传递数据的方法示例
Jul 27 Javascript
js实现简易聊天对话框
Aug 17 Javascript
Vue中保存数据到磁盘文件的方法
Sep 06 Javascript
jQuery AJAX应用实例总结
May 19 jQuery
扫微信小程序码实现网站登陆实现解析
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
在Windows版的PHP中使用ADO
2006/10/09 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
Python如何存储数据到json文件
2020/03/09 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
详解rem 适配布局
2018/10/31 HTML / CSS
为什么要做架构设计
2015/07/08 面试题
法律工作求职自荐信
2013/10/31 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
入党积极分子评语
2014/05/04 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
Python List remove()实例用法详解
2021/08/02 Python