`react-native-camera` 返回 data.uri 但无法访问图像(没有这样的文件或目录)

Posted

技术标签:

【中文标题】`react-native-camera` 返回 data.uri 但无法访问图像(没有这样的文件或目录)【英文标题】:`react-native-camera` returns a data.uri but image cannot be accessed (no such file or directory) 【发布时间】:2018-10-17 05:40:13 【问题描述】:

我将不胜感激这方面的任何帮助。 我正在使用 react-native-camera,当我获得使用 takePictureAsync() 方法拍摄的图像的 URI 时,我无法访问该图像。

我拍摄了照片并导航到下一个屏幕,将图像数据作为参数传递:

  const data = await this.camera.takePictureAsync(options);
  console.log(data);
  this.props.navigation.navigate('FFV', 
    postItem: data.uri
  );

在下一个屏幕 (FFV) 中,我将照片加载到 <Image/> 中,如果我通过图像的 base64 则它​​可以工作,但如果我只通过 则不起作用>URI

<Image style=styles.imagePreview
          source= isStatic:true, uri: postItem 
          resizeMode="contain"
 />

图像未渲染,如果我尝试使用 CameraRoll 保存文件,我会得到“没有这样的文件或目录”。

我已经在模拟器和物理设备上进行了测试——同样的问题。 好像和WRITE_EXTERNAL_STORAGE权限无关,因为我授予权限后,出现ENOENT错误。

我在手机上查看了应用程序的缓存,没有这些文件,是不是没有写呢?如果 RNCamera 有问题,我会认为 URI 不会成功返回。

"react-native": "0.57.1",
"react-native-camera": "^1.3.0",

任何帮助将不胜感激!

【问题讨论】:

试试不带“file:///”的uri @Kranthi 试过了,没有帮助。我还尝试了不带扩展名的“.jpg”。 【参考方案1】:

我遇到了同样的问题并最终使用了这个CameraRoll.saveToCameraRoll(data.uri)

【讨论】:

谢谢,会试一试告诉你。 我很想知道是否有人想出了解决此问题的方法,而无需保存到相机胶卷。如果可能的话,我想避免填满用户的相机胶卷。 @MurphyRandle 你得到什么了吗? @JustABeginner 我希望我记得!但我认为我能够使用 expo-camera(因为我使用的是 Expo),获取他们在拍照后返回的临时 URI,使用文件 API 将图像复制到永久位置,然后我就可以走了.【参考方案2】:

您应该删除文件的任何 file:// 前缀,例如:

    const uri = data.uri.startsWith('file://')
              ? data.uri.substr('file://'.length)
              : data.uri;

【讨论】:

得到错误:错误:找不到源文件。在 fs.js:283

以上是关于`react-native-camera` 返回 data.uri 但无法访问图像(没有这样的文件或目录)的主要内容,如果未能解决你的问题,请参考以下文章

react-native-camera (android): takePictureAsync() 抛出错误

React-native-camera 没有出现在屏幕上

[RN] React Native 使用 react-native-camera 过程中报错 Found react-native-camera 'mlkit' but wasn

在应用关闭的情况下使用“react-native-camera”

react native 增加react-native-camera

gradlew assembleRelease 不适用于 react-native-camera