如何使用React Native下载文件?

时间:2017-06-14 13:27:14

标签: react-native react-native-fs

我正在使用React Native为Android和iOS构建应用程序。我试图让用户在点击按钮时下载PDF文件。

我没有找到解决此问题的其他解决方案。我找到了用于查看PDF的库,但我想让用户下载PDF。你能帮帮我吗?

4 个答案:

答案 0 :(得分:25)

一小时前刚刚实施了下载功能:p

请按照以下步骤操作:

a)npm install rn-fetch-blob

b)按照安装说明进行操作。

b2)如果您想在不使用rnpm的情况下手动安装软件包,请转到他们的wiki

c)最后,这就是我在应用程序中下载文件的方式:

const { config, fs } = RNFetchBlob
let PictureDir = fs.dirs.PictureDir // this is the pictures directory. You can check the available directories in the wiki.
let options = {
  fileCache: true,
  addAndroidDownloads : {
    useDownloadManager : true, // setting it to true will use the device's native download manager and will be shown in the notification bar.
    notification : false,
    path:  PictureDir + "/me_"+Math.floor(date.getTime() + date.getSeconds() / 2), // this is the path where your downloaded file will live in
    description : 'Downloading image.'
  }
}
config(options).fetch('GET', "http://www.example.com/example.pdf").then((res) => {
  // do some magic here
})

答案 1 :(得分:6)

如果您正在使用博览会,react-native-fetch-blob无法正常工作。使用FileSystem

这是一个有效的例子:

const { uri: localUri } = await FileSystem.downloadAsync(remoteUri, FileSystem.documentDirectory + 'name.ext');

现在您拥有localUri,其中包含下载文件的路径。您可以自由设置自己的文件名,而不是name.ext

答案 2 :(得分:1)

我遵循了 Jonathan Simonney 的解决方案,在这篇文章的上面。但我不得不稍微改变一下:

const { config, fs } = RNFetchBlob;
  const date = new Date();

  const { DownloadDir } = fs.dirs; // You can check the available directories in the wiki.
  const options = {
    fileCache: true,
    addAndroidDownloads: {
      useDownloadManager: true, // true will use native manager and be shown on notification bar.
      notification: true,
      path: `${DownloadDir}/me_${Math.floor(date.getTime() + date.getSeconds() / 2)}.pdf`,
      description: 'Downloading.',
    },
  };

  config(options).fetch('GET', 'http://www.africau.edu/images/default/sample.pdf').then((res) => {
    console.log('do some magic in here');
  });

答案 3 :(得分:0)

我遇到了同样的问题,可以使用Expo WebBrowser Module来工作

// install module 
npm install react-native-webview

// import the module
import * as WebBrowser from 'expo-web-browser';

// then in your function you can call this function
await WebBrowser.openBrowserAsync(file_ur);

它将打开文件的预览,然后用户可以使用“共享”按钮下载。