需求: 提交详细信息的表单, 并上传对应图片(如下图), 后台接口要求表单数据和图片需要一次上传完成..

分析: 实际上, 每个element-ui Upload组件都应发送一次请求, 很明显不符合我们的要求, 于是,我们需要自定义上传.

  表单上传首先考虑FormData对象, 那么就需要新建一个formData并在合适的时间将表单数据添加到formData中.

  首先, 考虑将表单数据在提交的时候使用FormData.append()放到FormData对象中, 文件/图片在change的时候放入到FormData对象中.

  使用append方法会有个问题, 如果上传不成功, 当你再次在当前页面提交, 你会发现表单数据重新添加了一遍, 那是因为FormData中key相同并不会覆盖掉 之前的.

  所以这里考虑用FormData.set(), 如果FormData不存在这个key, 则新建一条新数据, 如果存在, 则修改此条数据.

  定义表单数据:

    data() {
return {
checkForm: {
customerName: '',
phone: '',
socialSecurityNO: ''
},
formData: new FormData(), // 用来上传的表单 // 用来显示的图片
cardFrontImageUrl: '',
cardBackImageUrl: '' // 用来回传的图片
cardFrontUrl: '',
cardBackUrl: ''
}
},

上传

    methods: {
// 选择图片上传, 添加到formData中
cardFrontOnChange (file, fileList) {
if (fileList.length > 0) {
this.formData.set('cardFront', file.raw);
}
this.cardFrontImageUrl = URL.createObjectURL(file.raw);
}, cardBackOnChange (file, fileList) {
if (fileList.length > 0) {
this.formData.set('cardBack', file.raw);
}
this.cardBackImageUrl = URL.createObjectURL(file.raw);
}, // 提交所有信息时, 将数据添加到formData中
submit () {
for (let key in this.checkForm) {
if (this.checkForm[key]!=='') {
this.formData.set(key, this.checkForm[key]);
}
}
// api.submitInfo()是封装好的上传方法
api.submitInfo(this.formData).then(res=> {
if (res.code === 0) {
// 成功后处理
} else {
// 失败后处理
}
})
}
}

如果后台接口设计的是上传的图片不用区分key, 那么选择图片添加到FormData中时,  只能用append方法, set将会覆盖前面的, 根据实际需求选择合适的方法就可以了.

UI组件--element-ui--Upload多组件自定义上传的更多相关文章

  1. AntD框架的upload组件上传图片时使用customRequest方法自定义上传行为

    本次做后台管理系统,采用的是 AntD 框架.涉及到图片的上传,用的是AntD的 upload 组件. 我在上一篇文章<AntD框架的upload组件上传图片时使用customRequest方法 ...

  2. antdv的Upload组件实现前端压缩图片并自定义上传功能

    Ant Design of Vue的Upload组件有几个重要的api属性: beforeUpload: 上传文件之前的钩子函数,支持返回一个Promise对象. customRequest: 覆盖组 ...

  3. SharePoint 2010 ——自定义上传页面与多文件上传解决方案

    最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...

  4. el-upload自定义上传文件,并携带其余参数,且action不报错

    用el-upload组件自定义上传按钮,并携带其余参数,且必传参数action 不报错 <template> <el-col :span="6" :mode=&q ...

  5. 兼容IE8的flash上传框架"uploadify"自定义上传按钮样式的办法

    (uploadify版本:3.2.1 ) 因为公司业务的原因,所做的项目需要兼容IE8,因此做的上传插件无奈选择的是基于flash的uploadify. 由于是基于flash的,所以使用过程中,难以给 ...

  6. [k]自定义上传文件按钮样式

    <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title> ...

  7. drupal7 开发自定义上传、下载模块的上传功能

    关键点有两个:1.在页面上显示出上传的控件,2.代码实现文件上传到服务器的功能 一.显示控件: 先来看关键点1: 实现页面显示出上传控件, 关键代码: $form['my_file_field'] = ...

  8. Dynamics CRM 自定义上传附件的图片悬浮层显示

    CRM中的附件是以流的形式保存在了数据库中,这样做的一个坏处是一旦系统运行时间久,附件上传的多了势必会导致数据库极速扩大,即影响系统的运行效率也对后期的迁移维护带来了不必要的麻烦.所以很多的客户都会要 ...

  9. Django 批量保存图片文件 自定义上传方法

    1.前端通过formData的方式批量增加图片或文件 for (var i = 0; i < form_img_list.length; i++) { formData.append('imag ...

随机推荐

  1. Parco_Love_String

    二维的kmp直接搞出来emmm, 后缀自动机都没这个快(本弱鸡不会后缀自动机) #include <bits/stdc++.h> using namespace std; #define ...

  2. How to use draggable attribute?怎样使用拖拽属性代码分享

    6.7 Drag and dropSupport: dragndropChrome for Android NoneChrome 4+iOS Safari 11.0+UC Browser for An ...

  3. 一位数组的最大子数组(debug版)

    package 数组; import java.util.Arrays; import java.util.Scanner; public class Sum { public static void ...

  4. 编年史:OI测试

    2019.4.18 t1:给出不定方程ax+by+c=0,求x在x1~x2并且y在y1~y2时的解个数.考场上想的是一个扩欧板子敲下去,然后构造出x>=x1的最小解,同时得出y,然后通过通项来枚 ...

  5. Pocket Gem OA: Path Finder

    1. 有向图 找所有start node到end node之间的路径 输入是一个txt 形式如下: A E A : B C D. B : C C : E D : B. 输出一个List<Stri ...

  6. 利用Openssh后门 劫持root密码

    Linux操作系统的密码较难获取.而很多Linux服务器都配置了Openssh服务,在获取root权限的情况下, 可以通过修改或者更新OpenSSH代码等方法,截取并保存其SSH登录账号密码,甚至可以 ...

  7. SpringBoot缓存之redis--最简单的使用方式

    第一步:配置redis 这里使用的是yml类型的配置文件 mybatis: mapper-locations: classpath:mapping/*.xml spring: datasource: ...

  8. 单链表反转java代码

    据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. public class Node { int index; Nod ...

  9. flask 电子邮件进阶实践-用模板发送163邮件

    电子邮件进阶实践 下面来学习构建邮件的HTML正文,并使用模板组织内容. 一封电子邮件的正文可以是纯文本(text/plain),也可以是HTML格式的文本(text/html).处于全面的考虑,一封 ...

  10. jquery的cookie插件

    一.JS文件 /*! * jQuery Cookie Plugin v1.4.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2 ...