解決el-upload加上accept文件過濾,before-upload不調(diào)用的問題

近日因業(yè)務(wù)需求,要用到ElementUI的el-upload上傳組件來實(shí)現(xiàn)拖拽上傳功能。

結(jié)果,發(fā)現(xiàn)在組件上加上accept文件過濾字段之后,如果用戶選錯文件進(jìn)行拖拽上傳時,上傳事件會直接被終止,而又不會彈出任何錯誤信息——例如,提示上傳的文件格式不對,這種體驗(yàn)很不友好。

通過測試發(fā)現(xiàn),原來加上accept字段之后,如果拖拽的文件格式不對,根本不會觸發(fā)before-upload,所以原本用來驗(yàn)證文件的事件根本沒被調(diào)用,因此沒有彈出任何提示。

經(jīng)過總結(jié),發(fā)現(xiàn)只要在el-upload組件加上原生的drop事件即可解決上述問題。即:

@drop.native="e => beforeUploadHandler(e.dataTransfer.files[0])"

以下為代碼示例:

<template>
  <div class="upload-wrap">
    <el-upload
      action
      accept=".png,.jpg,.jpeg"
      msgPage
      drag
      :show-file-list="false"
      :http-request="e => requestHandler(e)"
      :before-upload="file => beforeUploadHandler(file, 512000, ['image/png', 'image/jpg', 'image/jpeg'])"
      //該處加入原生drop事件,獲取拖拽的文件
      @drop.native="e => beforeUploadHandler(e.dataTransfer.files[0], 512000, ['image/png', 'image/jpg', 'image/jpeg'])"
      >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳</em></div>
      <div class="el-upload__tip" slot="tip">只能上傳PNG,JPG,JPEG文件,且不超過500kb。</div>
    </el-upload>
  </div>
</template>

<script>
export default {
  name: 'default',
  data() {
    return {
    };
  },
  methods: {
    //http-request: 覆蓋默認(rèn)的上傳行為,自定義上傳方法
    requestHandler(e){
      console.log(e);
    },
    //before-upload: 上傳之前進(jìn)行文件驗(yàn)證
    beforeUploadHandler(file, size, accept){
      console.log(file, size, accept);
      //驗(yàn)證文件大小
      if(file.size > size){
        this.$message.info(`上傳文件不能大于500kb`);
        return false;
      }

      //驗(yàn)證文件類型
      if(accept.indexOf(file.type) == -1){
        this.$message.info(`只能上傳${accept.join('、')}文件`);
        return false;
      }
      return true;
    }
  }
};
</script>

<style lang="scss" scoped>
.upload-wrap{
  margin-top: 30px;
  text-align: center;
}
</style>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容