圖片允許多張上傳,在使用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)
}
},