electron 中使用 electron-dl 进行多个下载,并显示多个进度条
时间: 2024-02-15 13:04:37 浏览: 144
可以通过创建多个 `BrowserWindow` 实例来实现同时下载多个文件,并显示多个进度条。每个窗口实例都可以使用 `electron-dl` 模块来下载文件,并通过 IPC 通信机制将下载进度传递给主进程,主进程再将进度传递给渲染进程来更新进度条。
以下是示例代码:
```
// 主进程代码
const { app, BrowserWindow, ipcMain } = require('electron');
const { download } = require('electron-dl');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({ width: 800, height: 600 });
mainWindow.loadFile('index.html');
}
app.on('ready', () => {
createWindow();
});
ipcMain.on('download', (event, { url, filename }) => {
const win = new BrowserWindow({ show: false }); // 创建一个新窗口
download(win, url, { directory: '/path/to/save', filename: filename })
.then(dl => {
// 下载完成
win.close();
event.sender.send('download-complete', { filename });
})
.catch(error => {
// 下载失败
win.close();
event.sender.send('download-error', { filename, error });
});
// 显示下载进度
win.webContents.session.on('will-download', (event, item, webContents) => {
item.on('updated', () => {
if (item.isInProgress()) {
event.sender.send('download-progress', { filename, progress: item.getReceivedBytes() / item.getTotalBytes() });
}
});
});
});
```
在渲染进程中,可以监听 `download-progress`、`download-complete` 和 `download-error` 事件来更新进度条的状态。示例代码如下:
```
// 渲染进程代码
const { ipcRenderer } = require('electron');
ipcRenderer.on('download-progress', (event, { filename, progress }) => {
// 更新进度条
});
ipcRenderer.on('download-complete', (event, { filename }) => {
// 下载完成
});
ipcRenderer.on('download-error', (event, { filename, error }) => {
// 下载失败
});
```
通过这种方式,您可以同时下载多个文件,并显示多个进度条,而不会影响应用程序的性能或稳定性。
阅读全文