如何在react-native中获取文件的绝对路径?

Ron*_*obo 4 react-native react-native-android

我正在寻找react-native中的文件选择器,该选择器返回我选择的文件的绝对路径。我目前正在使用react-native-document-picker,但它以的格式提供了相对路径content://com.android.providers.media.documents/document/......。当我要压缩视频文件时,像react-native-ffmpegreact-native-video-processing这样的库都需要文件的绝对路径。

Ron*_*obo 5

我实际上是自己想出来的。您可以通过3种方式获得绝对路径。

最方便的方法:使用react-native-document-picker,选择后会给您一个相对路径,类似这样content://com.android......。将该相对路径传递给库的Stat(filepath)函数react-native-fetch-blob。该对象将返回绝对路径。附加路径file://以将其用于进一步的操作。

另两种方式是通过使用react-native-image picker和CameraRoll(React Native Library)

我希望这有帮助 !

  • 我在使用这种方法时遇到错误 - 错误:无法统计路径 `null`,因为它不存在或者它不是 MessageQueue.__invokeCallback (MessageQueue.js:397) 的 fs.js:210 中的文件夹。 js:127 at MessageQueue.__guard (MessageQueue.js:297) at MessageQueue.invokeCallbackAndReturnFlushedQueue (MessageQueue.js:126) at debuggerWorker.js:72 (2认同)
  • 我也面临同样的问题..Error: failed to stat path null 因为它不存在或者它不是一个文件夹 (2认同)
  • 我遇到了这个错误:“无法统计路径为空,因为它不存在或不是文件夹”最后,我意识到我需要允许 READ_EXTERNAL_STORAGE 权限。希望接下来的人如果仍然遇到同样的错误,会发现这很有用 (2认同)

jay*_*ram 5

安装react-native-fetch-blob以获取文件的路径。下面是一个例子。

pickFile = async () => {
try {
  const res = await DocumentPicker.pick({
    type: [DocumentPicker.types.allFiles],
  });

  console.log(res.uri);
  //output: content://com.android.providers.media.documents/document/image%3A4055

  RNFetchBlob.fs
    .stat(res.uri)
    .then((stats) => {
      console.log(stats.path);
 //output: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20200831-WA0019.jpg
    })
    .catch((err) => {
      console.log(err);
    });
} catch (err) {
  if (DocumentPicker.isCancel(err)) {
  } else {
    throw err;
  }
}};
Run Code Online (Sandbox Code Playgroud)