美文网首页vue项目实战项目总结
vue实战(14)——基于Element图片批量上传

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

作者: wayne1125 | 来源:发表于2020-04-13 11:54 被阅读0次

    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

    相关文章

      网友评论

        本文标题:vue实战(14)——基于Element图片批量上传

        本文链接:https://www.haomeiwen.com/subject/pwkgmhtx.html