bulk-downloader
v1.0.0
Published
A powerful Node.js utility for managing concurrent file downloads with live progress updates, info/overall Progress/start/kill support, and optional automatic zipping of the output folder.
Downloads
6
Readme
DownloadManager
A powerful Node.js utility for managing concurrent file downloads with live progress updates, info/overall Progress/start/kill support, and optional automatic zipping of the output folder.
🚀 Features
- Concurrent downloads (configurable)
- Supports Windows/Linux/macOS (PowerShell or curl-based)
- Info: current Running process
- Progress: current file start/end and percentage show
- Progress: current file start/end and percentage show
- Kill (force-stop) in-progress downloads
- Optional zipping after download
- Deletes folder after zipping (optional)
- Combined progress (downloads + zip) as a percentage
📦 Installation
npm install bulk-downloader🔧 Usage
JavaScript
const { DownloadManager } = require('your-package-name');
const fileList = [
{ downloadURL: 'https://example.com/image1.jpg', fileName: '1.jpg' },
{ downloadURL: 'https://example.com/image2.jpg', fileName: '2.jpg' }
];
const manager = new DownloadManager({
fileList,
outputFolder: './downloads',
zipFile: './downloads.zip',
isDeleteFolder: true,
concurrency: 2
});
manager.on('info',(info)=>console.log(info));
manager.on('progress', (progress)=>console.log(progress));
manager.on('overallProgress',({percent})=>console.log(percent))
manager.on('error', console.error);
manager.on('doneDownloads', () => console.log('✅ Downloads completed'));
manager.on('doneZip', (zipPath) => console.log(`📦 Zipped to: ${zipPath}`));
manager.on('killed', () => console.log('💀 Downloads killed'));
manager.start();
// Optional
setTimeout(() => manager.kill(), 10000); // kill after 10 sec📊 Progress
Each progress event includes:
{
index: 1, // file index
total: 5, // total files
fileName: '1.jpg',
downloadURL: 'https://...'
status: 'started' | 'downloading' | 'done' | 'skipped' | 'zipping',
message: 'optional output',
overall: '98.74%' // total download+zip progress
}Use manager.overallProgress() to get the current combined progress manually.
📛 API
Constructor options
{
fileList: Array<{ downloadURL: string, fileName?: string }>,
outputFolder?: string,
zipFile?: string,
isDeleteFolder?: boolean,
concurrency?: number
}Methods
start()– begin downloadingpause()– pause downloadsresume()– resume paused downloadskill()– forcefully stop all active downloadsoverallProgress()– get current total progress asXX.XX%
🚠 OS Support
- Windows: uses
PowerShell+Invoke-WebRequest - Linux/macOS: uses
curl
Ensure curl or PowerShell is available in your PATH.
✍️ Author
Created by sivaprasath2004 — feel free to contribute or report issues!
📌 TODO
- Real-time byte-based progress bar
- Retry mechanism on failure
- UI for CLI display
