2

根据文档:

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

我正在我的android(小米)设备上对其进行测试,当我选择图像时它工作正常,但是在关闭应用程序并再次打开它或使用重新运行它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 并且它可以工作!!!尽管它与重新启动之前相同。我能做些什么?谢谢

4

3 回答 3

1

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

不要忘记在file:///response.path 前面添加,所以如果我使用您的代码:

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

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

于 2019-08-27T20:25:39.280 回答
0

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

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

于 2021-04-12T03:50:26.747 回答
0

解决这个问题的标准方法是禁用图像的缓存,但是我总是通过在 url 末尾添加一个额外的参数来解决这个问题,使其与以前不同,所以用这种方式你会欺骗 os(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 ()。祝你好运!

于 2019-03-25T17:43:57.213 回答