индикатор при загрузке файла с электронным и экспресс - PullRequest
0 голосов
/ 22 апреля 2019

Я получил этот код из этого сообщения , но когда я использую этот код, у меня появляется эта ошибка

Attempting to call a function in a renderer window that has been closed or released. Function provided here: :127:28

В строке 127: session.defaultSession.on('will-download', function (event, downloadItem, webContents) {

Когда начинается загрузка, отображается сообщение об ошибке, что файл пуст, но мой файл не пуст

И индикатор выполнения показывает 0% при загрузке файла


В файле EJS

function sendURL(URL, format) {
    let tile = "<%= title %>"
    tit = tile.replace(/[`~!@#$^&'",.<>\{\}\[\]\\\/]/gi, '')
    window.location.href = `/download?URL=${URL}&title=${tit}&format=${format}`
}

[... More code ...]

const {session} = require('electron').remote

session.defaultSession.on('will-download', function (event, downloadItem, webContents) {
    "use strict";

    if (downloadItem.getTotalBytes() === 0) {
        swal({
            position: 'center',
            type: 'error',
            title: 'Fichier vide !',
            showConfirmButton: true,
            icon: "warning"
        })
    }

    downloadItem.on('updated', function (event, state) {
    process.stdout.write(downloadItem.getTotalBytes())
        if (state === 'interrupted') {
            swal({
                position: 'center',
                type: 'error',
                title: 'Téléchargement interrompu',
                showConfirmButton: true,
                icon: "info",
            })
        } else if (state === 'progressing') {
            let jQueryprogress = $(".progress")
            let jQuerybar = $(".progress__bar")
            let jQuerytext = $(".progress__text")
            let percent = 0
            let update
            let resetColors
            let speed = 200
            let orange = 30
            let yellow = 55
            let green = 85
            let timer

            resetColors = function () {
                jQuerybar
                    .removeClass("progress__bar--green")
                    .removeClass("progress__bar--yellow")
                    .removeClass("progress__bar--orange")
                    .removeClass("progress__bar--blue")

                jQueryprogress
                    .removeClass("progress--complete")

            }

            update = function () {
                timer = setTimeout(function () {
                    try {
                        let percentage = downloadItem.getReceivedBytes() / downloadItem.getTotalBytes()
                        percent = percentage * 100
                        percent = parseFloat(percent.toFixed(2))
                        update()
                    } catch (error) {
                        clearTimeout(timer)
                        percent = 100
                        resetColors()
                        jQueryprogress.addClass("progress--complete")
                        jQuerybar.addClass("progress__bar--blue")
                        jQuerytext.find("em").text("Complete")
                        percent = 0
                    }

                    jQuerytext.find("em").text(percent + "%")

                    if (downloadItem.isPaused()) jQuerytext.find("span").text('En pause')
                    else jQuerytext.find("span").text(downloadItem.getFilename())

                    if (percent >= green) {
                        jQuerybar.addClass("progress__bar--green")
                    }

                    else if (percent >= yellow) {
                        jQuerybar.addClass("progress__bar--yellow")
                    }

                    else if (percent >= orange) {
                        jQuerybar.addClass("progress__bar--orange")
                    }

                    speed = Math.floor(Math.random() * 100)

                    jQuerybar.css({ width: percent + " %" })

                }, speed)

            }

            $(".itemDL").addClass('bcenter')
            jQueryprogress.addClass("progress--active")
            update()
            resetColors()
        }

    })
    downloadItem.once('done', function (event, state) {

        console.log("Inside download done function " + event + state)

        if (state === 'completed') {
            setTimeout(function () {

                $(".itemDL").removeClass("bcenter")
                swal({
                    position: 'center',
                    type: 'success',
                    title: 'Téléchargement terminé',
                    showConfirmButton: true,
                    icon: "success",
                })

            }, 50)

        } else if (state === 'cancelled' || state === "interrupted") {
            $(".itemDL").removeClass("bcenter")
            swal({
                position: 'center',
                type: 'error',
                title: 'Téléchargement annulé ou interrompu',
                showConfirmButton: true,
                icon: "error",
            })
        } else {
            $(".itemDL").removeClass("bcenter")
            swal({
                position: 'center',
                type: 'error',
                title: 'Téléchargement échoué',
                showConfirmButton: true,
                icon: "error"
            })

        }
    })

    session.defaultSession.clearStorageData([], function () { console.log(' cleared all storages after download ') })
    session.defaultSession.clearCache(function () { console.log('cleared all caches after download') })
})

В router.js

expressApp.get('/download', async (req, res) => {
    let URL = req.query.URL
    let title = req.query.title
    let format = req.query.format

    res.header('Content-Disposition', `attachment; filename="${title}.${format}"`)

    await ytdl(URL, {
        format: format
    }).pipe(res)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...