react-native-image-picker uri对于Android而言不持久

时间:2019-03-25 16:57:38

标签: android react-native react-native-image-picker

根据文档:

  

在iOS上,不要假设返回的绝对uri将持续存在。参见#107

我正在android(Xiaomi)设备上对其进行测试,当我选择图像时它可以正常工作,但是在关闭应用程序并再次打开它或使用react-native run-android重新运行它之后,{{1 }}不再起作用,我得到的是蓝色,而不是图像。 这是我的代码:

uri

after re-opening the app 重新启动应用程序后,这是我的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,并且可以正常工作! 与重新启动之前相同。我能做什么?谢谢

3 个答案:

答案 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 执行移动或复制功能。

此方法允许您拍摄多张图像并在拍摄图像后上传。