Загрузите несколько видеороликов в формате mp4, расположенных по URL-адресам, одним нажатием кнопки с помощью JSZip - PullRequest
0 голосов
/ 20 июня 2020

У меня есть список URL-адресов, которые указывают на видео в формате mp4, и я хочу иметь возможность загружать их все одним нажатием кнопки. Я подумал об использовании библиотеки JSZip для этой цели и следил за демонстрацией здесь: демонстрационное приложение JSZip , чтобы написать приведенный ниже код. Загружается папка с файлами mp4, но когда я пытаюсь извлечь, я получаю сообщение об ошибке: «Произошла ошибка при извлечении файлов (см. Снимок экрана ниже). снимок экрана с ошибкой Может ли кто-нибудь помочь мне выяснить, что Я делаю неправильно? Я использую Firefox и Ubuntu FYI. Спасибо

var Promise = window.Promise;
if (!Promise) {
    Promise = JSZip.external.Promise;
}

/**
 * Fetch the content and return the associated promise.
 * @param {String} url the url of the content to fetch.
 * @return {Promise} the promise containing the data.
 */
function urlToPromise(url) {
    return new Promise(function(resolve, reject) {
        JSZipUtils.getBinaryContent(url, function (err, data) {
            if(err) {
                reject(err);
            } else {
                resolve(data);
            }
        });
    });
}

function saveall(urls)
{
       
var zipFilename = "zipFilename.zip";
    var proxyUrl ="https://cors-anywhere.herokuapp.com/";
    var zip = new JSZip();
urls.forEach(function(url){
const filename = url.substring(url.lastIndexOf('/'))+".mp4"
  // loading a file and add it in a zip file
        zip.file(filename, urlToPromise(proxyUrl+url), {binary:true});
});


  // when everything has been downloaded, we can trigger the dl
    zip.generateAsync({type:"blob"}, function updateCallback(metadata) {
        var msg = "progression : " + metadata.percent.toFixed(2) + " %";
        if(metadata.currentFile) {
            msg += ", current file = " + metadata.currentFile;
        }
        showMessage(msg);
        updatePercent(metadata.percent|0);
    })
    .then(function callback(blob) {

        // see FileSaver.js
        saveAs(blob, "example.zip");

        showMessage("done !");
    }, function (e) {
        showError(e);
    });
}

function dAll() {
        var  links = [];
        var atags = document.getElementsByClassName("download-button");
        for(var atag of atags){
                links.push(atag.getAttribute("href")); // Click on the checkbox
        }

        console.log(links);
        //saveToZip('project.zip',links)
        resetMessage();
        saveall(links);
}
...