在使用Vant中Uploader过程中遇到的坑:图片状态更改失败

图片允许多张上传,在使用file.status时总是不生效,直接跳转到成功状态,后来尝试加入了定时器;同时多张上传时采用判断数组的方式

复制代码
 <van-uploader
                accept="*"
                v-model="fileList"
                multiple
                :max-count="4"
                :after-read="afterRead"
                :before-read="beforeRead"
              />
复制代码

在下方使用时:

复制代码
    
   // 图片上传后回调
    beforeRead(file) {
      if (Array.isArray(file)) {
        file.forEach((item) => {
          console.log(item, '11111')
          if (
            !item.type.startsWith('image') &&
            !item.type.startsWith('video')
          ) {
            Toast.fail('请上传图片或视频')
            return false
          } else if (item.size > 104857600) {
            Toast.fail('选择上传内容不能超过100M')
            return false
          } else {
            return true
          }
        })
        return true
      } else {
        if (!file.type.startsWith('image') && !file.type.startsWith('video')) {
          Toast.fail('请上传图片或视频')
          return false
        } else if (file.size > 104857600) {
          Toast.fail('选择上传内容不能超过100M')
          return false
        } else {
          return true
        }
      }
    },
    setUpload(file) {
      let that = this
      // setTimeout(() => {
      let config = {
        headers: {
          //添加请求头
          'Content-Type': 'multipart/form-data',
        },
      }
      let deviceFile = []
      let params = new FormData()
      if (Array.isArray(file)) {
        //因为该组件单选是对象,多选是数组
        deviceFile = file
        console.log(deviceFile, 'deviceFile')
      } else {
        deviceFile.push(file)
      }
      deviceFile.map((item) => {
        //files是后台参数name字段对应值
        params.append('file', item.file)
      })
      // 文件上传状态
      Toast('文件正在上传请等候,请收到上传成功提示后再关闭页面!')
      //添加上传状态,避免用户在上传未完成时点击提交按钮
      this.isLoading = false
      // params.append('file', file.file)
      this.$http({
      // 这里填写的是接口内容
      })
        .then((res) => {
          if (res.data.code == 0) {
            Toast.success('上传成功!')
            // 文件成功状态
            if (Array.isArray(file)) {
              file.forEach((item) => {
                item.status = 'done'
                item.message = '上传成功'
              })
            } else {
              file.status = 'done'
              file.message = '上传成功'
            }

            this.isLoading = true
          }
          res.data.data.map((item) => {
            that.fileid.push(item.fileid)
          })
        })
        .catch()
      file.status = ''
      file.message = ''
      // }, 1000)
    },
    afterRead(file) {
      // 文件上传状态
      if (Array.isArray(file)) {
        file.forEach((item) => {
          item.status = 'uploading'
          item.message = '上传中...'
          setTimeout(() => {
            this.setUpload(file)
          }, 1000)
        })
      } else {
        file.status = 'uploading'
        file.message = '上传中...'
        setTimeout(() => {
          this.setUpload(file)
        }, 1000)
      }
    },
复制代码

 

posted @   SuperArchi  阅读(4629)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示