这里的 afterRead 方法 是vant上传自带方法,
见文档 https://youzan.github.io/vant/#/zh-CN/uploader
afterRead(file) {
this.$toast.loading("识别中");
//判断图片的大小,单位是字节
if (file.file.size > 1048576) {
console.log('压缩执行')
let canvas = document.createElement('canvas') // 创建Canvas对象(画布)
let context = canvas.getContext('2d')
let img = new Image()
img.src = file.content // 指定图片的DataURL(图片的base64编码数据)
img.onload = () => {
canvas.width = 400
canvas.height = 300
context.drawImage(img, 0, 0, 400, 300)
file.content = canvas.toDataURL(file.file.type, 0.92) // 0.92为默认压缩质量
let files = this.dataURLtoFile(file.content, file.file.name)
}
} else {
// 符合大小的,直接上传
this.fileImgid(file.file)
}
},
将base64转换为file文件 与上面的方法搭配使用。
// 将base64转换为file文件
dataURLtoFile(dataurl, filename) {
let arr = dataurl.split(',')
let mime = arr[0].match(/:(.*?);/)[1]
let bstr = atob(arr[1])
let n = bstr.length
let u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, {
type: mime
})
},
附带 html,可以不使用实例,vant的文档中写的很详细
<van-uploader :after-read="afterRead" capture="camera" class="uploader"/>