Electron – Ako sťahovať súbory v hlavnom procese a prečo je sťahovanie zrušené

Electron

V tomto článku sa opäť venujem Electronu, tento krát sťahovaniu súboru a príčine, prečo sťahovanie vždy skončí s výsledkom cancelled.

Pri práci s Electronom a tvorením kódu pre sťahovanie súborom som sa stretol s problémom, ktorý som nevedel veľmi dlho vyriešiť a ním bol stav sťahovania – cancelled. Žiaľ nikde som nenašiel článok o tom, prečo mi tento stav vzniká.

Problém prečo som chybu neodhalil veľmi rýchlo bol ten, že som sa zameriaval na proces sťahovania a hľadania problému, ktorý môže uvedený stav vytvárať. Až po dlhšom čase som si všimol, že som mal použitý príkaz, ktorý celé sťahovanie blokoval.

    session.defaultSession.on('will-download', (event, item, webContents) => {

        event.preventDefault();
        let filename = item.getFilename();
        let size = item.getTotalBytes();

        if (size == 0) {
            console.error("Incorrect file size");
            return;
        }
        let pathToFile = app.getAppPath('userData') + "/downloads/" + filename;
        item.setSavePath(pathToFile);

        item.on('updated', (event, state) => {

            let received = item.getReceivedBytes();
            console.log("size: " + size);
            if (state === 'interrupted') {
                console.log('Download is interrupted but can be resumed')
            } else if (state === 'progressing') {
                let progress = Math.round((received / size) * 100);
                let script = `window.progress.value = ${progress}`;
                mainWindow.webContents.executeJavaScript(script).catch(() => { });
                if (item.isPaused()) {
                    console.log('Download is paused')
                } else {
                    console.log(`Received bytes: ${item.getReceivedBytes()}`)
                }
            }
        });
        item.once('done', (event, state) => {
            if (state === 'completed') {
                console.log('Download successfully')
            } else {
                console.log(`Download failed: ${state}`)
            }
        });
    });

Zdrojom problému bol veľmi populárny príkaz, vďaka ktorému sa ruší východiskové správanie a preberá kontrola nad celým procesom.

event.preventDefault();

Záver

Odstránením uvedeného príkazu už download funguje bez problémov aj so všetkými stavmi a detegovaním progresu v percentách.

https://www.mldgroup.com

Vyštudovaný top manažér pôsobiaci najmä ako manažér, marketér, softvérový inžinier, konzultant, bloger, YouTuber a zatiaľ neúspešný hudobník a producent. V rámci praxe pôsobil v rôznych odvetviach na rôznych pozíciách v malých aj veľkých firmách, vrátane spoluprác a partnerstiev s významnými firmami či poradenskými spoločnosťami.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.