el-upload批量上传

el-upload批量上传

最近在处理 el-upload 上传图片,上传单张图片成功时直接在on-success里面进行 push ,图片成功展示。

但在进行批量上传的时候 在on-success里面进行 push ,图片只能 push 第一张进去。

因为在 on-success 只会对 status = ‘success’ 图片进行处理,在执行第一张图片时候,其他的图片状态还是 uplaoding。然后对 fileList 进行了 push 操作,后面图片的 on-success 就不会执行了。

所以 批量上传 时需要对 fileList 进行处理,需要等所有图片都成功时再进行push操作。

由于 on-success 第三个参数 fileList 会展示所有的图片,即在给 el-upload 设置了默认图片也会展示,push时会出现异常,所以可以根据 图片上传接口 响应出参进行特殊处理。

<el-upload
  multiple
  list-type="picture-card"
  :headers="headers"
  :data="dataObj"
  :action="action"
  :file-list="fileList"
  :limit="20"
  :before-upload="beforeUpload"
  :on-success="handleImageSuccess"
  :on-preview="handlePictureCardPreview"
  :on-remove="handleRemove"
  :on-exceed="handleExceed"
>
</el-upload>

beforeUpload(file) {
 const _self = this
  const _URL = window.URL || window.webkitURL
  return new Promise(resolve => {
    const img = new Image()
    img.src = _URL.createObjectURL(file)
    img.onload = function() {
      _self.fileList.push({
        hasSuccess: false,
        uid: file.uid,
        width: this.width,
        height: this.height
      })
    }
    resolve(true)
  })
},

// 所以 批量上传 时需要对 fileList 进行处理,需要等所有图片都成功时再进行push操作。
handleImageSuccess(response, file, fileList) {
  if (fileList.every(v => v.status === 'success')) {
    fileList.forEach(item => {
      const index = this.fileList.findIndex(img => img.uid === item.uid)
      // 由于 on-success 第三个参数 fileList 会展示所有的图片,即在给 el-upload 设置了默认图片也会展示,push时会出现异常,所以可以根据 图片上传接口 响应出参进行特殊处理。
      if (item.response && index >= 0) {
        this.fileList[index].name = item.name
        this.fileList[index].url= item.response.data.url
      }
    })
    // 当图片上传不成功时,可以进行 强制渲染(慎用)
    // this.$forceUpdate()
  }
},
// 移除图片
handleRemove(file) {
  const { imgPath } = file
  this.fileList = this.fileList.filter(item => {
    return item.url!== url
  })
},

handlePictureCardPreview(file) {
  this.dialogImageUrl = file.url
  this.dialogVisible = true
},

handleExceed(files, fileList) {
  this.$message.warning(`最多上传20张商品图片。`);
},
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-uploadElement UI 中的一个组件,用于文件上传。它支持单个文件上传批量文件上传批量上传时,可以选择多个文件,也可以拖动多个文件一起上传。同时,el-upload 也提供了多种事件和方法,方便我们在上传过程中进行相关操作,如上传前的校验、上传成功后的回调等。 以下是 el-upload 批量上传文件的使用方法: 1. 在 Vue 组件中引入 el-upload 组件: ``` <template> <el-upload class="upload-demo" action="/upload" :multiple="true" :on-preview="handlePreview" :on-remove="handleRemove" :before-upload="beforeUpload"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </template> <script> export default { methods: { // 上传前的校验 beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500K = file.size / 1024 < 500; if (!isJPG) { this.$message.error('上传头像图片只能是 JPG/PNG 格式!'); } if (!isLt500K) { this.$message.error('上传头像图片大小不能超过 500KB!'); } return isJPG && isLt500K; }, // 预览文件 handlePreview(file) { console.log('预览', file); }, // 删除文件 handleRemove(file, fileList) { console.log('删除', file, fileList); } } } </script> ``` 2. 通过设置 `:multiple="true"` 来开启批量上传功能; 3. 可以通过 `:before-upload` 方法来实现上传前的校验,并在校验失败时给出错误提示; 4. 可以通过 `:on-preview` 方法来实现预览文件功能; 5. 可以通过 `:on-remove` 方法来实现删除文件功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值