vue实战(14)——基于Element图片批量上传

1、运用场景

image.png
<el-form-item label="主相册:" prop="picAddressList">
                <span class="advice-size">建议尺寸: 750 * 500</span>
            <el-upload class="avatar-uploader-multi" accept="image/*" :file-list="picAddressList" :headers="myHeaders" :action="api/uploadImage`" list-type="picture-card"  :on-preview="handlePictureCardPreview" :on-success="(response, file) => handlePictureCardSuccess(response, file)" :on-remove="handleRemove" :before-upload="beforeUpload" multiple>
              <i class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>
            <el-dialog :visible.sync="dialogVisible">
              <img width="100%" :src="dialogImageUrl" alt="">
            </el-dialog>
          </el-form-item>
// 主相册
      handlePictureCardSuccess (response, file) {
        // console.log执行了三次
        if(response.code == 1) {
        this.picAddressList.push({
          "url": global.imgPath + response.data.url
        })
          this.formData.picAddressList.push(response.data.url)
        }
        // console.log执行了一次
      },
  • 原本单图上传的配置上加了multiple属性,选择3个图片文件后,一次性请求了3次接口,图片却只增加了一张,中间出现了三张闪一下又只剩一张了
  • 排查代码是this.picAddressList.push的过程中只执行了最后一次push,进一步改造上传push处理应该能解决
  • 翻阅了Element的上传api,找到了多图上传的相应方法,需要后端配合提供一个多图上传的接口

2、实现代码

<template>
  <div>
  <el-upload
     :multiple="multiple"
     :headers="myHeaders"
     action="api/uploadImage"
     list-type="picture-card"
     :auto-upload="false"
     :http-request="uploadFile"
     ref="upload"
     :on-preview="handlePictureCardPreview"
    >
      <i class="el-icon-plus"></i>
  </el-upload>
  <el-dialog :visible.sync="dialogVisible">
    <img width="100%" :src="dialogImageUrl" alt="">
  </el-dialog>
  <el-button @click="subPicForm">提交上传</el-button>
</div>
</template>
<script>

import axios from 'axios'
export default {
  data(){
    return {
        formDate:"",
        dialogVisible: false,
        dialogImageUrl: '',
    }
 },
 methods:{
    uploadFile(file){
  this.formDate.append('file', file.file);
},
subPicForm(){
  this.formDate = new FormData()
  console.log(this.formDate)
  this.$refs.upload.submit();
  let config = {
      headers: {
          'Content-Type': 'multipart/form-data',
          'x-access-token': 'token'
      }
  }
  console.log(this.formDate,config)
  axios.post(`api/uploadImage`, this.formDate,config).then( res => {
      console.log(res)
  }).catch( res => {
      console.log(res)
  })
}
  }
}
image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基于html5的多图片上传 本文是建立在张鑫旭大神的多文图片传的基础之上.首先先放出来大神多图片上传的博客地址:h...
    cofuMaster阅读 9,249评论 0 13
  • 一、写作背景 最近在用Vue写一个仿京东、淘宝的电商项目过程中踩了一个大坑 ---- 多图片上传 + 保存 二、问...
    Qibing_Fang阅读 7,187评论 10 19
  • 我特么凭什么要遵重一个猥琐的大胖子? 不就只会倚老卖老,还说什么不听老人言吃亏在眼前? 是什么样的家教,教出了你这...
    71f8b6c2dfd3阅读 101评论 0 1
  • 对于js继承,可能是老生常谈的问题,以前我也有写过相关的文章,最近也是因为经常用所以想再一次分享关于这方面的理解,...
    走走停停再走阅读 199评论 0 0
  • 【画者信息】女,28岁,某企业员工。 【绘画整体】画面给人的感觉画者是一个有一定规划性,把控能力强,做事情非常干脆...
    LJHONG阅读 146评论 0 0