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) {}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
uniapp,要在H5使用uploadFile上传文件,可以通过Blob实现。Blob是JavaScript的一个API,允许处理二进制数据。在H5环境,我们可以将需要上传的文件转换为Blob对象,然后通过uni.uploadFile进行上传。 首先,在代码创建一个input元素,用于选择本地文件。然后在选择文件时,获取到文件后,通过FileReader对象将文件转换为Blob对象。代码示例如下: ```html <input type="file" id="fileInput" accept="image/*" @change="selectFile"> <script> export default { methods: { selectFile(e) { const file = e.target.files[0]; if (!file) { return; } const reader = new FileReader(); reader.onload = (e) => { const blob = new Blob([new Uint8Array(e.target.result)]); // 调用上传文件的方法 this.uploadFile(blob); } reader.readAsArrayBuffer(file); }, uploadFile(blob) { uni.uploadFile({ url: 'http://example.com/upload', // 上传地址 filePath: blob, // Blob对象 name: 'file', // 上传文件的键 success: (res) => { console.log(res); }, fail: (err) => { console.log(err); } }) } } } </script> ``` 在上述示例,我们首先通过input元素选择文件,并在选择文件时调用selectFile方法。selectFile方法,通过FileReader对象的readAsArrayBuffer方法读取文件内容,并在读取完成后将内容转换为Blob对象。最后,调用uploadFile方法进行文件上传操作。 需要注意的是,uni.uploadFile的filePath参数接受的是Blob对象,而不是文件路径。此外,上传文件的URL和参数需要根据实际情况进行配置。 通过以上方法,我们可以在uniappH5环境使用uploadFile上传Blob对象

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

兴趣广泛的程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值