vant自動上傳圖片/文件

vant自動上傳文件/圖片

vant上傳圖片與elementUI有所不同,沒有自動上傳功能,所以與後端進行介面對接的時候可以在after-read中將文件進行上傳

html頁面

<!-- 上傳圖片 -->
<van-field name="uploadImg" label="圖片">
    <template #input>
        <van-uploader
                      :max-count="5"
                      multiple
                      v-model="uploadImg"
                      :max-size="50 * 1024 * 1024"
                      @oversize="onOversize"
                      :before-read="beforeRead"
                      :after-read="afterRead"
                      @delete="deleteFile"
                      accept="image/jpeg,image/jpg,image/png"
                      upload-icon="photo"
                      >
        </van-uploader>
    </template>
</van-field>

max-count:最大上傳個數

multiple:是否支援多選

:max-size:文件大小限制

@oversize:文件超出大小後的方法

:before-read:文件讀取之前(可以做文件類型等校驗)也可以進行文件大小判斷

:after-read:文件讀取之後(此時可以進行文件上傳)

@delete:文件刪除時的方法

accept:文件類型

upload-icon:顯示的圖標

文件超出大小時的方法

onOversize() {
    this.$toast('圖片大小不能超過 50Mb')
},

文件讀取之前

beforeRead(file) {
    if (file.type !== 'image/jpeg' && file.type !== 'image/jpg' && file.type !== 'image/png') {
        this.$notify({ type: 'danger', message: '請上傳 jpg、jpeg、png 格式圖片' })
        return false
    }
    return true
},

文件讀取之後

一般來說,前端在進行Post請求的時候會根據場景發送不同類型的數據,該Post請求頭的Content-Type欄位必須聲明相應的數據類型,比如說application/x-www-form-urlencoded、application/json、multipart/form-data等,根據實際應用,有時候會需要請求時來手動設置,不過大部分情況下瀏覽器會根據Body中的數據來自發的設置相應的請求頭。

afterRead(file, detail) {
    // 此時可以自行將文件上傳至伺服器
    console.log(file, detail)
    
    //發送請求
    let params = new FormData()
    params.append('file', file.file)
    params.append('size', file.file.size)
    
    api.submit(params)
        .then((res) => {
        this.$message.success('上傳圖片成功')
    })
        .catch((err) => {
        console.error(err)
    })
},

文件刪除後

deleteFile(file, detail) {
    console.log(file,detail)
},