在使用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)
      }
    },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM