Manajer pengunduhan file yang sederhana dan mudah digunakan untuk aplikasi Electron. Dirancang sebagai respons terhadap banyak masalah seputar electron-dl
dan memberikan solusi yang lebih kuat dan andal untuk mengunduh file di Electron.
Kasus penggunaan:
Unduh file dari URL
Dapatkan id yang terkait dengan unduhan untuk melacaknya
Secara opsional, tampilkan dialog "Simpan Sebagai".
Dapatkan pembaruan kemajuan pada unduhan
Dapat membatalkan/menjeda/melanjutkan pengunduhan
Mendukung banyak unduhan sekaligus
Diperlukan elektron 26.0.0 atau lebih baru.
// Dalam proses utama// Bukan contoh yang berfungsi, hanya demonstrasi APIimport { ElectronDownloadManager } dari 'electron-dl-manager';const manager = new ElectronDownloadManager();// Memulai downloadconst id = menunggu manager.download( { jendela: browserWindowInstance, url: 'https://example.com/file.zip', saveDialogOptions: {judul: 'Simpan File', }, callbacks: {onDownloadStarted: async ({ id, item, webContents }) => { // Lakukan sesuatu dengan id unduhan},onDownloadProgress: async (...) => {},onDownloadCompleted: async (...) = > {},onDownloadCancelled: async (...) => {},onDownloadInterrupted: async (...) => {},onError: (err, data) => {}, }});manager.cancelDownload(id);manager.pauseDownload(id);manager.resumeDownload(id);
Manajer Pengunduhan File Elektron
Instalasi
Memulai
API
Properti
isDownloadInProgress()
isDownloadPaused()
isDownloadResumable()
isDownloadCancelled()
isDownloadInterrupted()
isDownloadCompleted()
Memformat kemajuan pengunduhan
constructor()
download()
cancelDownload()
pauseDownload()
resumeDownload()
getActiveDownloadCount()
getDownloadData()
Antarmuka: DownloadParams
Antarmuka: DownloadManagerCallbacks
Kelas: ElectronDownloadManager
Kelas: DownloadData
Kelas tiruan
Pertanyaan Umum
Ucapan Terima Kasih
$ npm instal elektron-dl-manager
Anda sebaiknya menggunakan electron-dl-manager
dalam proses utama aplikasi Electron tempat Anda akan menangani pengunduhan file.
Dalam contoh ini, kami menggunakan penangan/invoker IPC untuk berkomunikasi antara proses utama dan proses penyaji, namun Anda dapat menggunakan strategi IPC apa pun yang Anda inginkan.
// MainIpcHandlers.tsimport { ElectronDownloadManager } from 'electron-dl-manager';import { ipcMain } from 'electron';const manager = new ElectronDownloadManager();// Renderer akan memanggil handler ini untuk memulai downloadipcMain.handle('download -file', async (acara, argumen) => { const { url } = args; biarkan unduhId const browserWindow = BrowserWindow.fromId(event.sender.id) // Anda *harus* memanggil manager.download() dengan menunggu atau // Anda mungkin mendapatkan perilaku yang tidak terduga downloadId = menunggu manager.download({window: browserWindow,url,// Jika Anda ingin mengunduh tanpa menyimpan sebagai dialogsaveAsFilename: 'file.zip',directory: '/directory/where/to/save',// Jika Anda ingin mengunduh dengan simpan sebagai dialogsaveDialogOptions: { title: 'Save File',},callbacks: { // item adalah turunan dari Electron.DownloadItem onDownloadStarted: async ({ id, item, rejectFilename }) => {// Kirim id unduhan kembali ke penyaji bersama// dengan beberapa databrowserWindow.webContents.invoke('download-started', { id, // Nama file yang digunakan untuk file tersebut akan disimpan sebagai nama file:resolveFilename, //Dapatkan ukuran file yang akan diunduh dalam byte totalBytes: item.getTotalBytes(),} }, onDownloadProgress: async ({ id, item, persenSelesai }) => {// Kirim progres pengunduhan kembali ke rendererbrowserWindow.webContents.invoke('download-progress', { id, persenSelesai, // Dapatkan jumlah byte yang diterima sejauh ini bytesReceived: item. getReceivedBytes(),} }, onDownloadCompleted: async ({ id, item }) => {// Kirim kembali penyelesaian download ke rendererbrowserWindow.webContents.invoke('download-completed', { id, // Dapatkan path ke file yang diunduh filePath: item.getSavePath(),}); }, onError: (err, data) => {// ... tangani kesalahan apa pun }} }); // Jeda pengunduhan manager.pauseDownload(downloadId);});
ElectronDownloadManager
Mengelola unduhan file dalam aplikasi Electron.
constructor()
konstruktor(params: DownloadManagerConstructorParams)
antarmuka DownloadManagerConstructorParams { /** * Jika ditentukan, akan mengeluarkan pesan debug internal. Berguna untuk * mengatasi masalah pengunduhan. Tidak logout kemajuan karena * seberapa sering hal itu terjadi. */ debugLogger?: (pesan: string) => void}
download()
Memulai pengunduhan file. Mengembalikan id
unduhan.
unduh(params: DownloadParams): Janji<string>
DownloadParams
antarmuka UnduhParams { /** * Contoh Electron.BrowserWindow */ jendela: Jendela Browser /** * URL untuk mengunduh */ url: tali /** * Callback yang akan ditentukan untuk mendengarkan event download */ panggilan balik: DownloadManagerCallbacks /** * Electron.DownloadURLOptions untuk diteruskan ke metode downloadURL * * @lihat https://www.electronjs.org/docs/latest/api/session#sesdownloadurlurl-options */ downloadURLOptions?: Elektron.DownloadURLOptions /** * Jika ditentukan, akan menampilkan dialog penyimpanan saat pengguna * mengunduh file. * * @lihat https://www.electronjs.org/docs/latest/api/dialog#dialogshowsavedialogbrowserwindow-options */ simpanDialogOptions?: SimpanDialogOptions /** * Nama file untuk menyimpan file sebagai. Jika tidak ditentukan, nama file * dari server akan digunakan. * * Hanya berlaku jika saveDialogOptions tidak ditentukan. */ simpanSebagaiNamaFile?: string /** * Direktori tempat menyimpan file. Harus menjadi jalan yang mutlak. * @default Direktori unduhan pengguna */ direktori?: string /** * Jika benar, akan menimpa file jika sudah ada * @default false */ menimpa?: boolean}
DownloadManagerCallbacks
antarmuka DownloadManagerCallbacks { /** * Saat pengunduhan telah dimulai. Saat menggunakan dialog "simpan sebagai", * ini akan dipanggil setelah pengguna memilih lokasi. * * Ini akan selalu dipanggil terlebih dahulu sebelum kemajuan dan acara selesai. */ onDownloadStarted: (data: DownloadData) => batal /** * Bila ada update progres download. Catatan: * Ini mungkin dilewati seluruhnya dalam beberapa kasus, ketika pengunduhan * segera selesai. Dalam hal ini, onDownloadCompleted * akan dipanggil. */ onDownloadProgress: (data: DownloadData) => batal /** * Setelah pengunduhan selesai */ onDownloadCompleted: (data: DownloadData) => batal /** * Ketika download telah dibatalkan. Disebut juga jika pengguna membatalkan * dari dialog simpan sebagai. */ onDownloadCancelled: (data: DownloadData) => batal /** * Saat pengunduhan terhenti. Hal ini mungkin disebabkan oleh * koneksi yang buruk, server down, dll. */ onDownloadInterrupted: (data: DownloadData) => batal /** * Ketika terjadi kesalahan. * Catatan: Tanda tangannya adalah (kesalahan, <mungkin beberapa data>). */ onError: (kesalahan: Kesalahan, data?: DownloadData) => void}
cancelDownload()
Membatalkan pengunduhan.
batalUnduh(id: string): batal
pauseDownload()
Menjeda pengunduhan.
jedaUnduh(id: string): batal
resumeDownload()
Melanjutkan pengunduhan.
resumeDownload(id: string): batal
getActiveDownloadCount()
Mengembalikan jumlah unduhan aktif.
getActiveDownloadCount(): nomor
getDownloadData()
Mengembalikan data unduhan untuk unduhan.
getDownloadData(id: string): DownloadData
DownloadData
Data dikembalikan dalam panggilan balik untuk diunduh.
kelas UnduhData { /** * ID yang dihasilkan untuk unduhan */ identitas: tali /** * Elektron.DownloadItem. Gunakan ini untuk mengambil nama file, jalur, dll. * @lihat https://www.electronjs.org/docs/latest/api/download-item */ barang: UnduhItem /** * The Electron.WebContents * @lihat https://www.electronjs.org/docs/latest/api/web-contents */ Konten web: Konten Web /** * Electron.Event * @lihat https://www.electronjs.org/docs/latest/api/event */ acara: Acara /** * Nama file yang disimpan ke komputer pengguna. * Direkomendasikan daripada Item.getFilename() karena mungkin tidak akurat saat menggunakan dialog simpan sebagai. */ terselesaikanNama file: string /** * Jika benar, pengunduhan dibatalkan dari dialog simpan sebagai. Tanda * ini juga akan berlaku jika pengunduhan dibatalkan oleh aplikasi saat * menggunakan dialog simpan sebagai. */ dibatalkanFromSaveAsDialog?: boolean /** * Persentase download yang telah selesai */ persenSelesai: nomor /** * Kecepatan pengunduhan dalam byte per detik. */ downloadRateBytesPerSecond: nomor /** * Perkiraan waktu yang tersisa dalam hitungan detik. */ estimasiWaktuTersisaDetik: angka /** * Jika pengunduhan terhenti, status penghentiannya dari */ terputusVia?: 'sedang berlangsung' | 'selesai'}
Anda dapat menggunakan perpustakaan bytes
dan dayjs
untuk memformat kemajuan unduhan.
$ npm instal byte dayjs $ npm instal @types/bytes --save-dev
impor byte dari 'byte'impor dayjs dari 'dayjs'impor relativeTime dari 'dayjs/plugin/relativeTime';impor durasi dari 'dayjs/plugin/duration';dayjs.extend(relativeTime);dayjs.extend(duration);const downloadData = manajer.getDownloadData(id); // atau DataItem dari callback// Akan mengembalikan sesuatu seperti 1,2 MB/sconst formattedDownloadRate = bytes(downloadData.downloadRateBytesPerSecond, { unitSeparator: ' ' }) + '/s'// Akan mengembalikan sesuatu seperti "dalam beberapa detik"const formattedEstimatedTimeRemaining = dayjs.duration(downloadData.estimatedTimeRemainingSeconds, 'detik').memanusiakan(benar)
isDownloadInProgress()
Mengembalikan nilai benar jika pengunduhan sedang berlangsung.
isDownloadInProgress(): boolean
isDownloadPaused()
Mengembalikan nilai benar jika unduhan dijeda.
isDownloadPaused(): boolean
isDownloadResumable()
Mengembalikan nilai benar jika unduhan dapat dilanjutkan.
isDownloadResumable(): boolean
isDownloadCancelled()
Mengembalikan nilai benar jika unduhan dibatalkan.
isDownloadCancelled(): boolean
isDownloadInterrupted()
Mengembalikan nilai benar jika pengunduhan terhenti.
isDownloadInterrupted(): boolean
isDownloadCompleted()
Mengembalikan nilai benar jika pengunduhan selesai.
isDownloadCompleted(): boolean
Jika Anda perlu meniru ElectronDownloadManager
dalam pengujian Anda, Anda dapat menggunakan kelas ElectronDownloadManagerMock
.
import { ElectronDownloadManagerMock } from 'electron-dl-manager'
onError()
tidak dipanggil. Electron DownloadItem
tidak menyediakan cara eksplisit untuk menangkap kesalahan unduhan secara umum:
https://www.electronjs.org/docs/latest/api/download-item#class-downloaditem
(Ini hanya memiliki peristiwa on('updated')
dan on('done')
, yang digunakan perpustakaan ini untuk mendefinisikan penangan panggilan balik.)
Fungsinya untuk URL yang tidak valid, ini akan memicu panggilan balik onDownloadCancelled()
.
const id = menunggu manajer.download({ jendela: jendela utama, url: 'https://alkjsdflksjdflk.com/file.zip', callback: {onDownloadCancelled: async (...) => { // Unduhan tidak valid; panggilan balik ini akan dipanggil}, }});
Cara yang lebih baik untuk menangani ini adalah dengan memeriksa sendiri apakah URL tersebut ada sebelum pengunduhan. Saya tidak dapat menemukan perpustakaan yang menurut saya dapat diandalkan untuk dimasukkan ke dalam paket ini, jadi sebaiknya Anda menemukan perpustakaan yang sesuai untuk Anda:
https://www.npmjs.com/search?q=url%20exists&ranking=maintenance
GPT juga menyarankan kode berikut (belum diuji):
fungsi async urlExists(url: string): Janji<boolean> { coba {const respon = menunggu pengambilan(url, { metode: 'HEAD' });return respon.ok; } tangkapan (kesalahan) {kembali salah; }}const ada = menunggu urlExists('https://example.com/file.jpg');
Kode ini menggunakan sebagian kecil dari electron-dl
dan dicatat dalam kode dimana kode tersebut digunakan.
electron-dl
dilisensikan di bawah Lisensi MIT dan dikelola oleh Sindre Sorhus [email protected] (https://sindresorhus.com).