如何从URI获取文件| Expo | React Native

7
我已经将Expo项目弹出。
在更改了info.plist之后,现在我可以在“打开应用程序列表”中找到我的应用程序,并且实际上可以使用我的Expo(React Native应用程序)打开该文件。
App.js
Linking.getInitialURL().then((url) => {
  if (url) {
        console.log(url);
    }

}).catch(err => console.error('An error occurred', err));

这段代码给出了这个URL。
file:///private/var/mobile/Containers/Data/Application/7E55EB55-7C49-4C0C-B4CB-63AC4F49689E/Documents/Inbox/matters-3.csv

那就意味着我现在有了电子邮件附件的URL,但是我该如何从我的应用程序中获取CSV字符串的数据呢?

所以我假设,当我点击“使用我的应用程序打开”时,系统传递给我的应用程序的URL实际上是我们应用程序目录中某个位置上的文档副本。

但是,当我尝试使用Expo.FileSystem.readAsStringAsync访问此文件时,它会给我一个错误,说文件不可读。

这是否与存储权限有关?

需要帮助......?


您能否详细说明您想对这些数据进行什么操作?当您说“获取该CSV的数据”时,是否意味着您想要读取整个文件并在屏幕上显示其内容或者 ...? - vonovak
我想将那个CSV文件作为一个字符串来使用,以便于调用我的函数来在应用程序中导入数据。 - Rutul Patel
请查看 https://github.com/johanneslumpe/react-native-fs,但请注意如果文件很大可能会出现性能问题。 - vonovak
@vonovak 有更新吗? - Rutul Patel
所以,我发现它仍然使用 exp:/// 方案,而不是我的 app.json 中自定义的方案。 - Rutul Patel
你有任何想法如何改变它吗? - Rutul Patel
2个回答

1
我认为你可以使用react-native-fs。这里应该可以工作,并将CSV文件的内容打印到控制台上。

App.js

var RNFS = require('react-native-fs');

Linking.getInitialURL().then((url) => {
  if (url) {
    RNFS.readFile(url).then((data) => {
      console.log(data);
    }

}).catch(err => console.error('An error occurred', err));

但是当我使用writeFile创建一个文件并尝试读取它时,它可以正常工作。 - Rutul Patel
下载文件时,我需要指定什么吗? - Rutul Patel

0

你可以像Carlo提到的那样使用react-native-fs或rn-fetch-blob,我推荐使用rn-fetch-blob。要读取文件,你可以查看它们的文档,大致如下:

let data = '';
RNFetchBlob.fs.readStream( ...options).then((ifstream) => {
ifstream.open()
ifstream.onData((chunk) => {
  data += chunk
  // show progress ...%
})
ifstream.onError((err) => {
  console.log('oops', err)
})
ifstream.onEnd(() => {  
  consol.log('final data', data)
})

}))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接