Электрон - Скачать файл в определенное место
Мне нужно скачать файл в определенное место в моей программе Electron.
Я пытался реализовать этот API, но не смог.
Затем я попытался реализовать официальный API, но не смог понять, как на самом деле начать загрузку файла.
Как я могу скачать файл в определенное место, скажем C:\Folder
?
Спасибо!
2 ответа
Я закончил тем, что использовал elecron-dl.
Чтобы отправить запрос на загрузку (с renderer.js
):
ipcRenderer.send("download", {
url: "URL is here",
properties: {directory: "Directory is here"}
});
в main.js
, ваш код будет выглядеть примерно так:
const {app, BrowserWindow, ipcMain} = require("electron");
const {download} = require("electron-dl");
let window;
app.on("ready", () => {
window = new BrowserWindow({
width: someWidth,
height: someHeight
});
window.loadURL(`file://${__dirname}/index.html`);
ipcMain.on("download", (event, info) => {
download(BrowserWindow.getFocusedWindow(), info.url, info.properties)
.then(dl => window.webContents.send("download complete", dl.getSavePath()));
});
});
Слушатель "загрузка завершена" находится в renderer.js
и будет выглядеть так:
const {ipcRenderer} = require("electron");
ipcRenderer.on("download complete", (event, file) => {
console.log(file); // Full file path
});
Если вы хотите отслеживать прогресс вашей загрузки:
В main.js
;
ipcMain.on("download", (event, info) => {
info.properties = status => window.webContents.send("download progress", status);
download(BrowserWindow.getFocusedWindow(), info.url, info.properties)
.then(dl => window.webContents.send("download complete", dl.getSavePath()));
});
В renderer.js
:
ipcRenderer.on("download progress", (event, progress) => {
console.log(progress); // Progress in fraction, between 0 and 1
const progressInPercentages = progress * 100; // With decimal point and a bunch of numbers
const cleanProgressInPercentages = Math.floor(progress * 100); // Without decimal point
});
Чтобы позволить пользователю загрузить файл в приложении Electron, вам необходимо сделать следующее:
Получить сеанс по умолчанию или сеанс пользователя из раздела. Смотрите сессию
Когда у вас есть экземпляр объекта сеанса, вы можете прослушивать такие события, как
will-download
который излучается наSession
объект, когда пользователь нажимает на ссылку, чтобы загрузить файл, и файл будет загружен.will-download
событие возвращаетitem
который будет загружен. этоitem
содержит необходимые события (загруженные, сбойные, приостановленные и т. д.) и необходимые методы (где сохранить файл) и т. д.
Теперь по поводу запроса на How to download a file to C:/folder
?
У вас есть 2 варианта относительно этого:
- Вы можете либо попросить пользователя указать место загрузки (поведение по умолчанию)
- Вы можете установить место загрузки файла, используя
item
объект, который вы получаете от событияwill-download
, Используйте методsetSavePath
на предмете предмета.
Если вы хотите установить местоположение загрузки по умолчанию для всех файлов, вы можете использовать setDownloadPath
на объекте сеанса. Тогда это будет путь по умолчанию для этого сеанса.
Как вы упомянули сами, электрон-dl кажется популярным способом сделать это. В основном со страницы GitHub: npm i -S electron-dl
const {BrowserWindow} = require('electron');
const {download} = require('electron-dl');
download(BrowserWindow.getFocusedWindow(), "http://url-to-asset", {directory:"c:/Folder"})