vue3 element plus FormData 图片上传

587 阅读1分钟

vue3 element plus FormData 图片上传,可以参考

 <el-upload
       class="avatar-uploader"
       :show-file-list="false"
       :headers="headers"
       :on-change="changeImgeSpouse"
       :auto-upload="true"
       v-model="formLabelAlign.spouseIdNumberUrl"
       accept=".jpg,.png">
       <img v-if="formLabelAlign.spouseIdNumberUrl" 
           :src="spouseIdNumberUrl?spouseIdNumberUrl:formLabelAlign.spouseIdNumberUrl" class="avatar"/>
       <img :src="ImgOne" v-else class="avatar"/>
 </el-upload>

element plus 文档上el-upload 有很多事件,我看着网友推荐的都用的on-success 或者 on-before事件。但是我这边尝试了都不生效,只有on-change事件生效了。


// 没有图片之前显示默认图片
import ImgOne from '@/assets/stepTwo/id-1.png'

//定义绑定的对象
const formLabelAlign = reactive({
        spouseIdNumberUrl:null,
})
    

// 设置headers getToken() 根据项目的情况来定哦~主要就是利用Cookie取一下token的值
const headers =  {
    Authorization: "Bearer " + getToken(),
    'Content-Type':'multipart/form-data'
}
 const changeImgeSpouse = (res,f) =>{
         //可以分别打印 res、f来看看参数
        let type = res.raw.name.substring(',').split('.')[1]
        let size = res.raw.size / 1024 / 1024 

        // 图片不能大于5MB
        if(size > 5 ){
            ElMessage.error('文件超出大小,请重新选择')
            return false
        }

        // 图片的格式
        if(type != 'jpg' && type != 'png'){
            ElMessage.error('文件格式错误,请重新选择')
            return false
        }

        let aimg = URL.createObjectURL(res.raw)
        spouseIdNumberUrl.value = aimg
        let formData = new FormData()
        formData.append('file',res.raw)
        
        // uploadImgUrlPost 是接口
        // headers 需要单独配置一下
        axios.post(uploadImgUrlPost,formData,{headers:uploadHeaders}).then(res =>{
            if(res.data.code == 200){
               formLabelAlign.spouseIdNumberUrl =  res.data.url
            }
        })
    }