根据文档:
在iOS上,不要假设返回的绝对uri将持续存在。参见#107
我正在android(Xiaomi)设备上对其进行测试,当我选择图像时它可以正常工作,但是在关闭应用程序并再次打开它或使用react-native run-android
重新运行它之后,{{1 }}不再起作用,我得到的是蓝色,而不是图像。
这是我的代码:
uri
重新启动应用程序后,这是我的uri:
ImagePicker.showImagePicker({
storageOptions: {
skipBackup: true
}
}, res => {
// handling error, etc.
this.setState({image: res.uri});
// persisting with AsyncStorage
}
);
//then showing it
<Image style={{height: 100, width: 100}} source={{ uri: this.state.image }}/>
这很奇怪,因为当我得到偏蓝的颜色并再次从我的画廊中选择同一张图片时,我得到了与上述相同的uri,并且可以正常工作! 与重新启动之前相同。我能做什么?谢谢
答案 0 :(得分:0)
解决此问题的标准方法是为图像禁用缓存,但是我总是通过在url末尾添加 extra参数使其与以前有所不同来解决此问题,因此这样,您就可以欺骗操作系统(在您的情况下为android)。 代码更改为如下内容:
<Image style={{height: 100, width: 100}} source={{uri:'your_image_link.com/image.jpg?ts=Math.random()' }}/>
这将为您的uri添加一个独特的尾巴,以防止缓存。
不要忘记,您需要将'your_image_link.com/image.jpg?ts=Math.random()'
放入 setState()中。
祝你好运!
答案 1 :(得分:0)
对于Android,您可以使用response.path
代替response.uri
来获取设备上的真实文件路径。
https://github.com/react-native-community/react-native-image-picker/blob/master/docs/Reference.md
别忘了在{。{1}}前面加上response.path,因此,如果我接受您的代码,
file:///
...
this.setState({image: "file:///" + res.path});
...
似乎是一条临时路径,在应用程序关闭时会被杀死。
答案 2 :(得分:0)
当我们使用 launchCamera()
方法拍摄图像时,图像会保存在临时位置,以便随时删除图像,您需要将该图像移动或复制到 Storage 中。您可以使用 react-native-fs 包将该图像从临时位置复制或移动到存储。 launchCamera()
返回临时位置 uri,您可以使用该 uri 执行移动或复制功能。
此方法允许您拍摄多张图像并在拍摄图像后上传。