最近项目需要优化图片上传,由单个改成多个,这里记录下自己遇到的一些问题和解决方法

本以为是传全部图片到后台,然后统一处理,但后面在Network中发现upload组件其实还是单一上传,那只能依照它的方式去做了

以下是几个问题的记录

1.上传多图时,success方法每次都只获取到最后一条数据

  这是由于每执行一次文件,就会执行一次success方法,而我们绑定的数据是在属性file-list上的,导致组件上的file-list被更新

  解决方法

    建议定义三个字段

      file_box:用于图片或文件刚开始作展示,由于file-list属性绑定字段有要求,必须是name,url,所以这里定义也可以做数据转化

      file_data:用于图片的添加删除操作,数据之间的变更

      file:用于提交到服务器的数据,看需要什么数据,对form_data做处理,可能会有人说直接提交form_data不就可以了,前提是你无需做数据处理和可以一次性提交成功,否则页面上的图片可能会变动

          

    初始化赋值,这里是以上定义的两个属性

    this.form[name].file_box = this.setFile(name);
    this.form[name].file_data = this.setFile(name);

    

    添加操作  

    success(e, file, name) {
let tmp_file = this.form[name].file_data;
if (e.code == 1) {
tmp_file.push({
name: file.name,
url: e.data.src,
});
} else {
this.$message({
message: e.msg,
type: 'warning'
});
this.remove(file, name);
}
},

    这里success是简单封装之后的方法,这样file_data添加就不会出现遗漏的情况

2.如果上传的内容并不全是图片,还有其他内容,那这里我们要对内容做限制,并进一步优化

  上传前判断方法before

    before(file) {
if (!/.(png|jpg|jpeg|doc|docx|xls|xlsx|pdf)$/.test(file.name)) {
this.$message.error('上传文件格式png, jpg, jpeg,doc, docx, xls, xlsx, pdf!');
return false;
}
},

  在执行删除操作后,再去添加图片就会发现数据有点问题,经过多次测试发现,upload组件在before方法执行阻止后会执行remove方法,随即我的数据就莫名少了一条,这才是我一直没发现的问题

    remove(file, name) {
let files = this.form[name].file_data;
if (files) {
let index = files.findIndex(item => item.url == file.url || (file.response&&(item.url == file.response.data.src))); //这里主要是删除图片
if (index > -1) {
files.splice(index, 1);
}
}
},

  然后就对删除操作做了一些限制,file.response是后台返回的已上传文件路径,用来判断删除图片的。

vue element多图上传的更多相关文章

  1. 封装Vue Element的upload上传组件

    本来昨天就想分享封装的这个upload组件,结果刚写了两句话,就被边上的同事给偷窥上了,于是在我全神贯注地写分享的时候他就神不知鬼不觉地突然移动到我身边,腆着脸问我在干啥呢.卧槽你妈,当场就把我吓了一 ...

  2. vue+element ui 的上传文件使用组件

    前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9 ...

  3. springBoot+ vue+ Element-ui实现合并多图上传(一次请求多张图片)

    这次上传使用的是Elemet-ui的uoload上传组件,组件预留的钩子回调还是比较充足的. 1:  实现多图上传主要用到以下两个属性: 下面讲一下属性使用: <el-upload :actio ...

  4. Vue的移动端多图上传插件vue-easy-uploader

    原文地址 前言 这段时间赶项目,需要用到多文件上传,用Vue进行前端项目开发.在网上找了不少插件,都不是十分满意,有的使用起来繁琐,有的不能适应本项目.就打算自己折腾一下,写一个Vue的上传插件,一劳 ...

  5. vue 仿微信朋友圈9张图上传功能

    项目需求要求用户上传商品的时候可以一次性上传9张图,多余9张提示‘只能上传9张图’,并且每张图右上角有个删除按钮,图片也可以点击放大. 出来的效果图如下: 话不多说,上代码: <el-form- ...

  6. vue之element-ui文件上传

    vue之element-ui文件上传 文件上传需求 ​ 对于文件上传,实际项目中我们的需求一般分两种: 对于单个的文件上传,比如拖动上传个图片之类的,或者是文件. 和表单一起实现上传(这种情况一般都是 ...

  7. 百度ueditor vue项目应用 -- 图片上传源码修改

    本文目的有两个,一.废掉单图上传,二.改造多图上传 大家都知道百度ueditor不是针对vue项目开发的,官方文档提供的源码包里有需要后端配置的接口,but到vue项目就不太好办了,网上有些文章也介绍 ...

  8. yii2组件之多图上传插件FileInput的详细使用

    作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  9. iOS 使用AFN 进行单图和多图上传

    图片上传时必要将图片进行压缩,不然会上传失败 1.单张图上传 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManag ...

随机推荐

  1. 主席树+二分 p4602

    题意:给出每一种果汁的美味度,价格,升数: m个询问,每个询问给出最高上限的钱g,以及给出最少的w 意思是,最多用g的钱去买最少l的果汁,问能得到的最大美味度: 美味度是取所有果汁中美味度的最小值: ...

  2. ISR吞吐性能问题

    ISR大致可以分几类: Cisco 860.880.890 ISR1800 (fixed).1800 (modular).2800.3800 Series ISR1900.2900.3800.3900 ...

  3. 433B.Kuriyama Mirai's Stones

    Kuriyama Mirai has killed many monsters and got many (namely n) stones. She numbers the stones from  ...

  4. Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类

    最近在开发中,需要用到一些系统信息,这里我把这些方法写成一个工具类方便以后复用,该工具类有以下6个功能: 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android ...

  5. 【深入HTTP协议】

    目录 HTTP 请求 HTTP 响应 "HTTP是(Hyper Text Transfer Protocol)超文本传输协议的缩写. HTTP的发展是万维网协会(World Wide Web ...

  6. 清华大学慕课 (mooc) 数据结构-邓俊辉-讲义-合并版

    邓公的数据结构一直好评如潮,可惜我如今才开始学习它.QAQ 昨天,<数据结构 (2020 春)>的讲义已经推到清华大学云盘上了.苦于 10 拼页的打印版不易在 PC 上阅读(手机上更是如此 ...

  7. The Preliminary Contest for ICPC Asia Xuzhou 2019 B. so easy (unordered_map+并查集)

    这题单用map过不了,太慢了,所以改用unordered_map,对于前面删除的点,把它的父亲改成,后面一位数的父亲,初始化的时候,map里是零,说明它的父亲就是它本身,最后输出答案的时候,输出每一位 ...

  8. Jmeter变量嵌套的方法

    jmeter中变量的嵌套一般有两种方式 1,调用__V函数 { "phone": "${phone}", "xxId": "${_ ...

  9. turtle库常用命令

    一, 海龟动作: 移动和绘制 forward()| fd() 前进多少 backward()|bk()|back()后退 right()|rt() 右转多少度 left() 左转多少度 goto()| ...

  10. NAT穿透的详细讲解及分析

    原文地址:http://bbs.pediy.com/thread-131961.htm 一.什么是NAT?为什么要使用NAT?NAT是将私有地址转换为合法IP地址的技术,通俗的讲就是将内网与内网通信时 ...