h5页面调用手机拍照 出现刷新或闪退
问题原因
根据产品业务,需要在h5页面调用手机的拍照,出现了页面刷新或闪退:
- 这是微信内置浏览器内存不足导致的,安卓手机此问题常见,尤其是红米低端机出现概率更高(自己就是用的红米手机);
- vant官网在van-uploader组件介绍页面的最下面也说了有这个问题;
- 使用input标签,调用拍照也是一样的页面刷新或闪退
- 是安卓自身的原因:链接 参考文章.
解决办法(使用van-uploader组件)
- van-uploader的标签加capture=“camera”,并限制格式result-type=“file”:
<van-uploader
ref="uploaderRef"
:before-read="handleBeforeRead"
result-type="file"
v-model="fileList"
capture="camera"
:afterRead="handleAfterRead"
max-count="1"
/>
- 在handleBeforeRead方法时,对拍照图片进行压缩:
import Compressor from 'compressorjs'
// An highlighted block
return new Promise((resolve, reject) => {
new Compressor(file, {
//压缩质量, 0-1
quality: 0.6,
//转换的类型,默认为 image/png
convertTypes: ['image/jpeg'],
//需要压缩的起始大小,默认5M, 5 * 1000 * 1000
convertSize: 5000000,
//压缩成功后处理
success(result) {
resolve(result);
},
error(err) {
console.log(err.message);
proxy.$toast({
type: 'fail', message: err.message })
reject()
},
});
});
- 在handleAfterRead方法时,返回的file是一个对象,并不是后端需要file文件流,需要file.file传给后端,且file.file可能不存在name,需要注意一下。