uniapp框架中H5模式选择图片后Blob对象的使用

在uniapp框架中使用uni.chooseImage()时,发现在浏览器访问的情况下,res的数据结构如下,和在小程序访问下的结果不一样。

{
"errMsg":"chooseImage:ok",
"tempFilePaths":["blob:http://localhost:8080/53ff91e0-9730-4c89-95d7-1e294663d3aa"],
"tempFiles":[{}]
}

其中,tempFilePaths是一个表示图片文件路径的数组,tempFiles则是图片文件对应的Blob对象数组(虽然直接JSON.stringify(res)打印出来的是空对象,但是单独打印tempFiles[0].type或.size或.path或.name是有内容的)。

之所以在浏览器访问情况下,返回了这样的数据结构,是浏览器的一种对用户电脑本地文件系统的保护机制。

另外,这个Blob对象的内容当前是保存在内存中的,随时可能被清除,所以虽然tempFilePaths[0]直接赋值给src可以显示,但是不建议。

这时候,可以使用FileReader对象的readAsDataURL方法和它的回调函数来转换获取图片文件的内容并保存到其它非内存的位置上(如浏览器的本地存储)。

uni.chooseImage({
	count:1,
	sourceType:['album','camera'],
	success(res) {
		let reader = new FileReader();
		reader.onload = function(){
			let dataURL = reader.result;
			uni.setStorageSync(res.tempFiles[0].path,dataURL);
		}
		reader.readAsDataURL(res.tempFiles[0]);
	},
	fail(error) {}
});

其中,dataURL是图片文件的Base64内容(也可直接赋值给src),例如:

data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/.......wHzUH//Z

如果要实现下载,可通过创建a标签,并使用它的click方法。

uni.chooseImage({
	count:1,
	sourceType:['album','camera'],
	success(res) {
		const link = document.createElement('a');
      	link.href = res.tempFilePaths[0];
     	link.download = res.tempFiles[0].name;
     	link.click();
	},
	fail(error) {}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴趣广泛的程序猿

有钱的捧个钱场,谢谢各位!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值