web-dev-qa-db-fra.com

Electron - Télécharger un fichier vers un emplacement spécifique

Je dois télécharger un fichier à un emplacement spécifique dans mon programme Electron.
J'ai essayé d'implémenter cette API mais j'ai échoué.
J'ai ensuite essayé d'implémenter l'API officielle , mais je n'ai pas compris comment démarrer le téléchargement du fichier.

Comment puis-je télécharger un fichier vers un emplacement spécifique, par exemple C:\Folder?
Merci!

9
avi12

J'ai fini par utiliser electron-dl .
Pour envoyer une demande de téléchargement (depuis le renderer.js):

ipcRenderer.send("download", {
    url: "URL is here",
    properties: {directory: "Directory is here"}
});

Dans le main.js, votre code ressemblerait à ceci:

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()));
    });
});

L'écouteur "Téléchargement terminé" se trouve dans le renderer.js, et ressemblerait à:

const {ipcRenderer} = require("electron");
ipcRenderer.on("download complete", (event, file) => {
    console.log(file); // Full file path
});

Si vous souhaitez suivre la progression de votre téléchargement:

Dans 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()));
});

Dans 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
});
25
avi12

comme vous l'avez mentionné vous-même, electron-dl semble être le moyen le plus populaire de le faire. Principalement à partir de la page 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"})
1
user2520818

Pour permettre à un utilisateur de télécharger un fichier dans une application Electron, vous devez procéder comme suit:

  1. Obtenez la session par défaut ou la session de l'utilisateur à partir de la partition. Voir Session

  2. Une fois que vous avez une instance de l'objet session, vous pouvez alors écouter des événements comme will-download qui est émis sur l'objet Session lorsque l'utilisateur clique sur un lien pour télécharger un fichier et que le fichier va être téléchargé.

  3. Le will-download événement renvoie le item qui va être téléchargé. Ce item contient les événements nécessaires (téléchargé, échoué, suspendu, etc.) et les méthodes nécessaires (où enregistrer le fichier), etc.

Maintenant, concernant la requête sur How to download a file to C:/folder?

Vous avez 2 choix à ce sujet:

  1. Vous pouvez soit demander à l'utilisateur de définir l'emplacement de téléchargement (comportement par défaut)
  2. Vous pouvez définir l'emplacement de téléchargement du fichier à l'aide de l'objet item , que vous obtenez de l'événement will-download . Utilisez la méthode setSavePath sur l'objet item .

Si vous souhaitez plutôt définir l'emplacement de téléchargement par défaut pour tous les fichiers, vous pouvez utiliser setDownloadPath sur l'objet de session. Ce sera alors le chemin par défaut pour cette session.

0
Akshay Anurag