Taro中如何调用原生相册并获取选中的图片路径?
在开发小程序时遇到了一个奇怪的问题,按照文档用了Taro.chooseImage调用相册,但选好图片后返回的临时路径在真机上显示不出来。我尝试过用Image组件直接展示,但图片一直是加载失败状态。
具体代码是这样的:
Taro.chooseImage({
count: 1,
success: (res) => {
this.setState({ imagePath: res.tempFilePaths[0] })
}
})
在模拟器里看到路径是/storage/emulated/0/tencent/MicroMsg...jpg,但真机调试时控制台报错“Failed to load resource: net::ERR_FILE_NOT_FOUND”。已经检查过网络权限配置了,实在想不通问题出在哪里。
Taro.chooseImage返回的临时路径确实可能会有问题,主要是因为小程序的沙盒机制。你需要用Taro.getFileSystemManager().readFile把图片转成 base64 再显示,或者直接上传到服务器返回一个可用的 URL。试试看这样改:
如果还是不行,直接上传到你的服务器或者云存储,拿到线上地址再展示,别折腾本地路径了,太不靠谱。
你需要用
Taro.saveFile把选中的图片保存到本地,然后再使用返回的本地路径。代码改一下,像这样:这里的关键点是,
tempFilePath只是个临时路径,在真机上可能很快失效,而savedFilePath是一个持久化路径,可以在小程序里正常使用。还有一点要注意,调用
Taro.saveFile的时候,确保你的小程序有足够的存储权限,尤其是在安卓设备上。如果用户拒绝了权限申请,保存也会失败。最后吐槽一句,这种问题真的很容易让人抓狂,官方文档居然没重点提这个限制,真是程序员的日常踩坑现场了。