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

分析: 实际上, 每个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. 基于Servlet的MVC模式用户登录实例

    关于MVC模式的简单解释 M Model,模型层,例如登录实例中,用于处理登录操作的类: V View,视图层,用于展示以及与用户交互.使用html.js.css.jsp.jQuery等前端技术实现: ...

  2. 使用AD画PCB的技能总结(纯属个人笔记,请大神多多指导)

    在参加2017全国电子设计大赛的过程中,我将平时学到的点点滴滴记录下来,作为曾经的回忆吧!(未完待续) ------------------------------------------------ ...

  3. Go 初体验 - 闭包的几种情况

    闭包: 闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义.要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量 ...

  4. C# 获取 串口 设备名称 与 串口号 ManagementObjectSearcher类

    1.效果图: 2.代码 class Program { static void Main(string[] args) { GetComList(); } private static void Ge ...

  5. Spring Boot 2.x中的management.security.enabled=false无效问题

    look: https://blog.csdn.net/qq_27385301/article/details/82899303

  6. 保存配置,获取配置,XML

    private void SaveSOConfig() { //保存配置 Dictionary<string, string> PrintConfigDIC = new Dictionar ...

  7. linux重启Oracle服务

    linux重启oracle服务命令(完整版) (1) 以oracle身份登录数据库,命令:su – oracle (2) 进入Sqlplus控制台,命令:sqlplus /nolog (3) 以系统管 ...

  8. HBuilder 模拟器

    模拟器名称    连接默认端口夜神安卓模拟器夜神安卓模拟器     62001逍遥安卓模拟器逍遥安卓模拟器     21503BlueStacks(蓝叠安卓模拟器)BlueStacks(蓝叠安卓模拟器 ...

  9. 解决IDEA创建多模块项目找不到创建class类的问题

    最近在利用idea创建一个多模块的java项目,但是让人十分抓狂的事,模块竟然找不到创建class类的选项,如图 前提:创建模块后假如右下角出现 务必要点击import Changes .然后看下是否 ...

  10. Raphael.js--基础1

    Raphael.js 特点: 1.兼容VML和SVG 2.扩展功能——动画 用法: //1.创建画布 let paper=Raphael(x,y,width,height); //2.创建形状 let ...