Ich muss eine Datei an einen bestimmten Speicherort in meinem Electron-Programm herunterladen.
Ich habe versucht, diese API zu implementieren, bin jedoch gescheitert.
Dann habe ich versucht, die offizielle API zu implementieren, konnte aber nicht erkennen, wie ich mit dem Herunterladen der Datei beginnen soll.
Wie kann ich eine Datei an einen bestimmten Speicherort herunterladen, z. B. C:\Folder
?
Vielen Dank!
Am Ende habe ich elecron-dl verwendet.
So senden Sie eine Download-Anfrage (vom renderer.js
):
ipcRenderer.send("download", {
url: "URL is here",
properties: {directory: "Directory is here"}
});
In dem main.js
würde Ihr Code ungefähr so aussehen:
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()));
});
});
Der Listener "Download abgeschlossen" befindet sich im renderer.js
und sieht folgendermaßen aus:
const {ipcRenderer} = require("electron");
ipcRenderer.on("download complete", (event, file) => {
console.log(file); // Full file path
});
In main.js
:
ipcMain.on("download", (event, info) => {
info.properties.onProgress = status => window.webContents.send("download progress", status);
download(BrowserWindow.getFocusedWindow(), info.url, info.properties)
.then(dl => window.webContents.send("download complete", dl.getSavePath()));
});
In 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
});
Damit ein Benutzer eine Datei in einer Electron-Anwendung herunterladen kann, müssen Sie folgende Schritte ausführen:
Rufen Sie entweder die Standardsitzung oder die Sitzung des Benutzers von der Partition ab. Siehe Sitzung
Sobald Sie eine Instanz des Sitzungsobjekts haben, können Sie auf Ereignisse wie will-download
warten, die für das Objekt Session
ausgegeben werden, wenn der Benutzer auf einen Link klickt, um eine Datei herunterzuladen, und die Datei heruntergeladen wird.
Das will-download
-Ereignis gibt die item
zurück, die heruntergeladen werden soll. Diese item
enthält die erforderlichen Ereignisse (heruntergeladen, fehlgeschlagen, angehalten usw.) und die erforderlichen Methoden (Speicherort der Datei) usw.
Nun zu der Frage nach How to download a file to C:/folder
?
Dazu haben Sie zwei Möglichkeiten:
item
Objekt festlegen, das Sie aus dem Ereignis will-download
erhalten. Verwenden Sie die Methode setSavePath
für das Objekt item .Wenn Sie lieber den Standard-Download-Speicherort für alle Dateien festlegen möchten, können Sie setDownloadPath
für das Sitzungsobjekt verwenden. Dann ist dies der Standardpfad für diese Sitzung.
wie Sie selbst sagten, scheint electron-dl der populäre Weg zu sein, dies zu tun. Hauptsächlich von der Github-Seite: npm i -S electron-dl
const {BrowserWindow} = require('electron');
const {download} = require('electron-dl');
download(BrowserWindow.getFocusedWindow(), "http://url-to-asset", {directory:"c:/Folder"})