如何从URI获取文件。世博会|反应本机

时间:2018-11-05 19:15:45

标签: ios react-native filesystems expo

我已经退出了博览会的项目。

更改 info.plist 之后,现在我可以将我的应用添加到“使用应用列表打开”列表中,并且实际上可以使用我的expo(React本机应用)打开该文件。

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它给我一个错误,说该文件不可读。

与存储许可有关吗?

需要帮助...吗?

2 个答案:

答案 0 :(得分:0)

我认为您可以使用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));

答案 1 :(得分: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)
})

}))