如何在Android上的React Native中读取包含content-URI的文件?

afdcj2ne  于 2023-03-24  发布在  React
关注(0)|答案(4)|浏览(169)

我正在使用React Native(0.48.3)进行Android开发。看起来,我被一个非常琐碎的任务卡住了:选择一个文件并将其内容作为字符串读取。我使用react-native-document-picker v2.0.0进行文件选择,它工作正常:我可以选择文件并获取它的URI。问题是,我无法使用此链接创建任何包来读取文件。我已经尝试过react-native-filesystemreact-native-fs,但似乎,它们只能与应用程序目录中的文件一起工作。无论如何,我得到了这样的错误:
Error: File was not found: content://com.android.providers.downloads.documents/document/7
我需要使用什么包或函数?

**UPD:**使用react-native-get-real-path检索真实的路径,而不是content://路径,可以正常工作。但这种转换真的有必要吗?可以使用content://路径加载文件吗?

cczfrluj

cczfrluj1#

假设你正在使用react-native-fs,使用copyFile可以将内容uri转换为文件uri。

if (url.startsWith('content://')) {
    const uriComponents = url.split('/')
    const fileNameAndExtension = urlComponents[uriComponents.length - 1]
    const destPath = `${RNFS.TemporaryDirectoryPath}/${fileNameAndExtension}`
    await RNFS.copyFile(uri, destPath)
}

然后,您可以按预期使用'file://' + destPath

wbrvyc0a

wbrvyc0a2#

react-native-fs中已经合并了pull request #395,这增加了直接从以content://开始的URI读取的可能性。我在这段代码中使用Android URI没有任何问题:

DocumentPicker.show({ filetype: ['*/*'] }, async (error, res) => {
  ...
  const exportedFileContent = await fs.readFile(res.uri, 'base64')
  ...
})
p1iqtdky

p1iqtdky3#

在Android设备上,你需要附加“file://”来加载任何文件。你可以使用你提到的包或手动完成。如果你手动附加,react-native-fs可以用来读取URI。

ahy6op9u

ahy6op9u4#

现在是2023年,如果还有人需要帮助,你可以试试react-native-blob-util软件包
当我使用react-native-document-picker选择文件时,我遇到了这个问题。帮助我的是使用RNBU.fs.readStream()函数。我首先使用它转换到base64,然后使用react-native-fs将文件保存到我的设备目录中,使用RNFS.writeFile()函数。React Native Blob util我希望这有帮助!

相关问题