Электрон - Скачать файл в определенное место

Мне нужно скачать файл в определенное место в моей программе 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, вам необходимо сделать следующее:

  1. Получить сеанс по умолчанию или сеанс пользователя из раздела. Смотрите сессию

  2. Когда у вас есть экземпляр объекта сеанса, вы можете прослушивать такие события, как will-download который излучается на Session объект, когда пользователь нажимает на ссылку, чтобы загрузить файл, и файл будет загружен.

  3. will-download событие возвращает item который будет загружен. это item содержит необходимые события (загруженные, сбойные, приостановленные и т. д.) и необходимые методы (где сохранить файл) и т. д.

Теперь по поводу запроса на How to download a file to C:/folder?

У вас есть 2 варианта относительно этого:

  1. Вы можете либо попросить пользователя указать место загрузки (поведение по умолчанию)
  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"})
Другие вопросы по тегам