react-native-all-file-downloader
v0.2.3
Published
Native file downloader for React Native with:
Readme
react-native-download-all-files
A powerful, native file downloader for React Native with robust features including background downloads, Base64 support, progress tracking, mid-flight controls, and interactive system notifications.
Features
- URL & Base64 Downloads: Seamlessly download remote URLs or save raw Base64 strings directly to the device.
- Background Downloads (iOS): URL downloads are handed off to the iOS background daemon and will finish even if the app is killed.
- Interactive System Notifications: Automatically displays progress notifications and "Download Complete" alerts. On iOS, users can long-press progress notifications to Pause, Resume, or Cancel natively.
- Mid-Flight Controls: Programmatically
pauseDownload,resumeDownload, andcancelDownload. - Custom HTTP Headers: Pass headers (like Authorization tokens) to securely download protected files.
- Configurable Destinations: Choose between the device's
documentdirectory or thecachedirectory. - Smart Overwrite Handling: Optionally set
overwrite: trueto prevent accumulating duplicatefile (1).pdffiles. - Tap to Open: Tapping the completion notification automatically opens the file in the device's native file viewer.
Installation
npm install react-native-download-all-filesor
yarn add react-native-download-all-filesIf you are using iOS, don't forget to run pod install in your ios directory.
Usage
Downloading a URL
import { downloadFile } from 'react-native-download-all-files';
try {
const result = await downloadFile({
source: 'url',
data: 'https://example.com/large-video.mp4',
fileName: 'large-video.mp4',
// Optional parameters:
headers: { Authorization: 'Bearer YOUR_TOKEN' },
cache: false, // Set to true to save to the temporary cache directory
overwrite: true, // Replaces existing files instead of appending (1) to the name
// Tracking Callbacks:
onStart: (downloadId) => {
console.log(`Download started with ID: ${downloadId}`);
// Save this ID if you want to pause/cancel it later programmatically!
},
onProgress: (progress) => {
console.log(`Download progress: ${progress}%`); // 0 to 100
}
});
console.log(`File saved successfully at: ${result.path}`);
} catch (error) {
console.error('Download failed:', error);
}Saving Raw Base64 Data
import { downloadFile } from 'react-native-download-all-files';
const base64Result = await downloadFile({
source: 'base64',
data: 'SGVsbG8gV29ybGQh...', // Your base64 string
fileName: 'hello.txt'
});
console.log(`Base64 file saved at: ${base64Result.path}`);Advanced Controls (Pause, Resume, Cancel)
If you captured the downloadId using the onStart callback, you can control the active download at any time:
import { pauseDownload, resumeDownload, cancelDownload } from 'react-native-download-all-files';
// Pause a download (Works natively on iOS)
await pauseDownload(downloadId);
// Resume a paused download (Works natively on iOS)
await resumeDownload(downloadId);
// Cancel an active download entirely (Works on iOS & Android)
await cancelDownload(downloadId);Platform Support
| Feature | iOS | Android | |---------|-----|---------| | URL Downloads | ✅ | ✅ | | Base64 Saving | ✅ | ✅ | | Custom Headers | ✅ | ✅ | | Native Notifications | ✅ | ✅ | | Cancel Downloads | ✅ | ✅ | | Background Downloads | ✅ | ✅ | | Interactive Notifications | ✅ | ❌ | | Pause / Resume | ✅ | ❌* |
* Note: Android natively delegates downloading to the OS DownloadManager. The OS will manage the network efficiently, but does not expose Pause/Resume APIs to third-party apps.
Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
MIT
Made with create-react-native-library
