web-dev-qa-db-ja.com

Electron-特定の場所にファイルをダウンロードする

Electronプログラムの特定の場所にファイルをダウンロードする必要があります。
このAPI を実装しようとしましたが、失敗しました。
次に、 公式API を実装しようとしましたが、実際にファイルのダウンロードを開始する方法がわかりませんでした。

特定の場所にファイルをダウンロードするにはどうすればよいですか、C:\Folder
ありがとう!

9
avi12

最終的に electron-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.onProgress = 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
});
25
avi12

あなたが自分で言ったように、electron-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"})
1
user2520818

ユーザーがElectronアプリケーションでファイルをダウンロードできるようにするには、次のことを行う必要があります。

  1. パーティションからデフォルトセッションまたはユーザーのセッションを取得します。 セッション を参照してください

  2. セッションオブジェクトのインスタンスを取得したら、 will-download などのイベントをリッスンできます。これは、ユーザーがリンクをクリックしてダウンロードするときにSessionオブジェクトで発行されますファイルとファイルがダウンロードされます。

  3. will-download イベントは、ダウンロードされる item を返します。このitemには、必要なイベント(ダウンロード、失敗、一時停止など)および必要なメソッド(ファイルの保存先)などが含まれます。

さて、How to download a file to C:/folderのクエリに関しては?

それに関して2つの選択肢があります。

  1. ユーザーにダウンロード場所の設定を依頼することができます(デフォルトの動作)
  2. イベントから取得する item オブジェクトを使用して、ファイルのダウンロード場所を設定できます will-downloaditem オブジェクトで setSavePath メソッドを使用します。

すべてのファイルのデフォルトのダウンロード場所を設定する場合は、セッションオブジェクトで setDownloadPath を使用できます。次に、それがそのセッションのデフォルトパスになります。

0
Akshay Anurag