how you can use react-native-fs (rnfs) to download a file in React Native
shyam manek

shyam manek @shyammanek

About: React Native Developer (iOS/Android)

Location:
Bangalore Karnataka India
Joined:
Jan 1, 2022

how you can use react-native-fs (rnfs) to download a file in React Native

Publish Date: Jul 5 '23
18 2

Step 1: Install the dependency

If you haven't already, install react-native-fs by running the following command:

npm install react-native-fs

Enter fullscreen mode Exit fullscreen mode

Step 2: Link the dependency

Link the react-native-fs package to your project

npx react-native link react-native-fs

Enter fullscreen mode Exit fullscreen mode

Step 3: Download a file

You can use the downloadFile method from react-native-fs to download a file. Here's an example:

import React, { useEffect } from 'react';
import { View, Button } from 'react-native';
import RNFS from 'react-native-fs';

const FileDownloadScreen = () => {
  useEffect(() => {
    // Optional: Delete the file if it exists before downloading
    const filePath = RNFS.DocumentDirectoryPath + '/example.pdf';
    RNFS.unlink(filePath)
      .then(() => {
        console.log('Previous file deleted');
      })
      .catch((err) => {
        console.log(err.message);
      });
  }, []);

  const downloadFile = () => {
    const url = 'https://www.example.com/example.pdf';
    const filePath = RNFS.DocumentDirectoryPath + '/example.pdf';

    RNFS.downloadFile({
      fromUrl: url,
      toFile: filePath,
      background: true, // Enable downloading in the background (iOS only)
      discretionary: true, // Allow the OS to control the timing and speed (iOS only)
      progress: (res) => {
        // Handle download progress updates if needed
        const progress = (res.bytesWritten / res.contentLength) * 100;
        console.log(`Progress: ${progress.toFixed(2)}%`);
      },
    })
      .promise.then((response) => {
        console.log('File downloaded!', response);
      })
      .catch((err) => {
        console.log('Download error:', err);
      });
  };

  return (
    <View>
      <Button title="Download File" onPress={downloadFile} />
    </View>
  );
};

export default FileDownloadScreen;

Enter fullscreen mode Exit fullscreen mode

In this example, we first delete any existing file with the same name (example.pdf) if it exists. Then, when the "Download File" button is pressed, the downloadFile function is called. It uses RNFS.downloadFile to initiate the download process. The fromUrl property specifies the URL of the file to download, and the toFile property specifies the path where the downloaded file will be saved.

You can also track the download progress by providing a progress callback to the RNFS.downloadFile method. The callback receives an object with the bytesWritten and contentLength properties, which can be used to calculate and display the download progress.

Remember to replace 'https://www.example.com/example.pdf' with the actual URL of the file you want to download.

That's it! With this example, you can download files using react-native-fs in your React Native app.

Comments 2 total

  • dslslerjglijsl
    dslslerjglijslJul 13, 2023

    WOWOWOWOOWOWOOWOWOWOOW

  • Benndip
    BenndipSep 13, 2023

    Thank you very much for this!!!

    Please is it possible to pause and resume the download ?

Add comment