【问题标题】:react-native-image-picker uri doesn't persist for androidreact-native-image-picker uri 不适用于 android
【发布时间】:2019-03-25 16:57:38
【问题描述】:

根据文档:

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

我正在我的 android(Xiaomi) 设备上对其进行测试,当我选择图像时它工作正常,但是在关闭应用程序并再次打开它或使用 react-native run-android 重新运行它之后,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: content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FCamera%2FIMG_20190310_123752.jpg

这很奇怪,因为当我得到蓝色并再次从我的画廊中选择相同的图片时,我得到与上面相同的 uri 并且它可以工作!!!虽然 和重启前一样。我能做些什么?谢谢

【问题讨论】:

  • 我没有同样的问题,但我听说开发者通常使用 redux-persist for android。
  • @Ziyo 是的,这正是我所做的,但我不知道为什么会这样?!我的代码有什么问题吗?另一方面,我用相机选择或拍摄的照片没有出现在pictures 目录中!可以吗?

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


【解决方案1】:

对于 Android,您可以使用 response.path 而不是 response.uri 来获取设备上的真实文件路径。 https://github.com/react-native-community/react-native-image-picker/blob/master/docs/Reference.md

别忘了在 response.path 前面加上 file:///,所以如果我拿走你的代码:

...
this.setState({image: "file:///" + res.path});
...

response.uri 似乎是临时路径,它在应用关闭的同时被杀死。

【讨论】:

    【解决方案2】:

    解决此问题的标准方法是禁用图像缓存,但我总是通过在 url 末尾添加 额外参数 来解决这个问题,以使其与以前不同,因此使用这样你就会欺骗操作系统(在你的情况下是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()。 祝你好运!

    【讨论】:

    【解决方案3】:

    当我们使用launchCamera() 方法拍摄图像时,图像会保存在临时位置,因此可以随时删除图像,您需要将该图像移动或复制到存储中。您可以使用 react-native-fs 包将该图像从临时位置复制或移动到存储。 launchCamera() 返回临时位置 uri,您可以使用该 uri 执行移动或复制功能。

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

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2022-11-08
      • 2017-08-20
      • 2020-03-02
      相关资源
      最近更新 更多