What is electron-dl?
The electron-dl package is a simple and convenient way to handle file downloads in Electron applications. It provides a set of features to manage download behavior, such as saving files to specific locations, showing progress, and handling download events.
What are electron-dl's main functionalities?
Basic File Download
This feature allows you to initiate a file download from a URL. The code sample demonstrates how to use electron-dl to download a file when a navigation event occurs in a BrowserWindow.
const { app, BrowserWindow } = require('electron');
const { download } = require('electron-dl');
app.on('ready', () => {
const win = new BrowserWindow();
win.loadURL('https://example.com');
win.webContents.on('will-navigate', (event, url) => {
event.preventDefault();
download(win, url);
});
});
Custom Download Options
This feature allows you to customize the download process by specifying options such as the directory to save the file and a callback to track download progress. The code sample shows how to set these options.
const { app, BrowserWindow } = require('electron');
const { download } = require('electron-dl');
app.on('ready', () => {
const win = new BrowserWindow();
win.loadURL('https://example.com');
win.webContents.on('will-navigate', (event, url) => {
event.preventDefault();
download(win, url, {
directory: '/path/to/save',
onProgress: (progress) => console.log(progress)
});
});
});
Handling Download Events
This feature provides a way to handle events related to the download process, such as completion or errors. The code sample demonstrates how to log the save path of a completed download.
const { app, BrowserWindow } = require('electron');
const { download } = require('electron-dl');
app.on('ready', () => {
const win = new BrowserWindow();
win.loadURL('https://example.com');
win.webContents.on('will-navigate', (event, url) => {
event.preventDefault();
download(win, url).then(dl => {
console.log('Download completed:', dl.getSavePath());
}).catch(console.error);
});
});
Other packages similar to electron-dl
electron-download-manager
electron-download-manager is another package for managing downloads in Electron applications. It offers similar functionalities to electron-dl, such as handling download events and saving files to specific locations. However, electron-dl is often preferred for its simplicity and ease of integration.
electron-fetch
electron-fetch is a package that provides a window.fetch API in Electron. While it is not specifically designed for file downloads, it can be used to fetch resources over the network, including files. It requires more manual handling of the download process compared to electron-dl.
electron-dl 
Simplified file downloads for your Electron app
Why?
- One function call instead of having to manually implement a lot of boilerplate.
- Saves the file to the users Downloads directory instead of prompting.
- Bounces the Downloads directory in the dock when done. (macOS)
- Handles multiple downloads.
- Shows badge count (macOS & Linux only) and download progress. Example on macOS:
Install
$ npm install electron-dl
Requires Electron 7 or later.
Usage
Register it for all windows
This is probably what you want for your app.
const {app, BrowserWindow} = require('electron');
const electronDl = require('electron-dl');
electronDl();
let win;
(async () => {
await app.whenReady();
win = new BrowserWindow();
})();
Use it manually
This can be useful if you need download functionality in a reusable module.
const {BrowserWindow, ipcMain} = require('electron');
const {download} = require('electron-dl');
ipcMain.on('download-button', async (event, {url}) => {
const win = BrowserWindow.getFocusedWindow();
console.log(await download(win, url));
});
API
It can only be used in the main process.
electronDl(options?)
electronDl.download(window, url, options?): Promise<DownloadItem>
window
Type: BrowserWindow
Window to register the behavior on.
url
Type: string
URL to download.
options
Type: object
saveAs
Type: boolean
Default: false
Show a Save As…
dialog instead of downloading immediately.
Note: Only use this option when strictly necessary. Downloading directly without a prompt is a much better user experience.
directory
Type: string
Default: User's downloads directory
Directory to save the file in.
filename
Type: string
Default: downloadItem.getFilename()
Name of the saved file.
This option only makes sense for electronDl.download()
.
errorTitle
Type: string
Default: 'Download Error'
Title of the error dialog. Can be customized for localization.
errorMessage
Type: string
Default: 'The download of {filename} was interrupted'
Message of the error dialog. {filename}
is replaced with the name of the actual file. Can be customized for localization.
onStarted
Type: Function
Optional callback that receives the download item.
You can use this for advanced handling such as canceling the item like item.cancel()
.
onProgress
Type: Function
Optional callback that receives an object containing information about the progress of the current download item.
{
percent: 0.1,
transferredBytes: 100,
totalBytes: 1000
}
onCancel
Type: Function
Optional callback that receives the download item for which the download has been cancelled.
openFolderWhenDone
Type: boolean
Default: false
Reveal the downloaded file in the system file manager, and if possible, select the file.
showBadge
Type: boolean
Default: true
Shows the file count badge on macOS/Linux dock icons when download is in progress.
Development
After making changes, run the automated tests:
$ npm test
And before submitting a pull request, run the manual tests to manually verify that everything works:
npm start
Related