您的当前位置:首页正文

vant的van-uploader在安卓机中点击无反应问题解决

2024-11-17 来源:个人技术集锦

van-uploader加了accept,需要去做文件预处理,也就是要加上before-read,如果不加,就会导致点击无反应

原代码:

<van-field label="文件上传">
   <template #input>
      <van-uploader accept="image/*" v-model="images" :max-count="1"
       :after-read="afterRead" />
   </template>
</van-field>

修改后的代码:

<van-field label="文件上传">
   <template #input>
      <!-- 上传组件要兼容安卓,必须设置before-read对文件进行预处理 -->
      <van-uploader :before-read="beforeRead" accept="image/*" v-model="images" :max- 
       count="1" :after-read="afterRead" />
   </template>
</van-field>

修改后加的js部分:

const acceptType = ref(['jpeg','png','jpg', 'pjeg', 'gif', 'x-png'])
const beforeRead = (file) => {
    const extension = file.name
    .substring(file.name.lastIndexOf('.') + 1)
    .toLowerCase() 

    // 判断是否超过最大上传限制,当前限制了200m
    const isMax = file.size / 1024 / 1024 < 200
    if (!isMax) {
      showFailToast(`文件大小上限为200M`)
      return false
    }
    // 判断是否图片类型
    const isImage = acceptType.value.includes(extension)
    if (!isImage) {
      showFailToast(`文件上传格式不正确`)
      return false
    }
    // 调用文件上传接口
    afterRead(file)
    return true
}

const afterRead = (file) => {
    const forms = new FormData()
    forms.append("type", 'image')
    forms.append("file", file.file)
    // 调用自己的接口
    ProposalApi.uploadFile(forms).then(res => {
    // 这里对file内的字段赋值后会同步到van-uploader组件绑定的images,后续要用到上传文件的id时,直接用images就可以
        file.id = res.id
    }, (err) => {
        file.status = 'failed'
        file.message = '上传失败'
    }).catch(err => {
        file.status = 'failed';
        file.message = '上传失败'
    })
}

但是,经测试,Android11版本以下的手机还是不行,如果有知道解决办法的大佬,欢迎讨论。

参考文章:https://www.cnblogs.com/zkmblog/p/17633134.html

显示全文