Создать Zip-файл, содержащий список файлов без библиотеки JSZip - PullRequest
0 голосов
/ 08 мая 2020

Здравствуйте, разработчики, Я пытаюсь загрузить список файлов, полученных методом запроса XMLHttpRequest (), и сохранить его в массиве файлов. Я хотел заархивировать все файлы в массиве, используя javascript, без использования какой-либо сторонней библиотеки. Я пытался добиться этого с помощью методов URL.createObjectURL (url) и URL.revokeObjectURL (url), но получаемый мной файл поврежден.

Я делюсь своим фрагментом кода, пожалуйста, помогите мне

 const URLS = [
            'https://vr.josh.earth/assets/2dimages/saturnv.jpg',
            'https://vr.josh.earth/assets/360images/hotel_small.jpg',
            'https://vr.josh.earth/assets/360images/redwoods.jpg'
        ];
        $(document).ready(function () {
            debugger
            $("#downloadAll").click(function () {
                var blob = new Array();
                var files = new Array();
                URLS.forEach(function (url, i) {
                    getRawData(url, function (err, data) {
                        debugger
                        var mydata = data;
                        // mydata = btoa(encodeURIComponent(data));
                        // var blobData = b64toBlob(mydata , 'image/jpg');
                        var blobData = new Blob([mydata], { type: 'image/jpg' });
                        blob.push(blobData);
                        var filename = "testFiles" + i + ".jpg";
                        var file = blobToFile(blobData, filename);
                        files.push(file);

                        debugger
                        if (files.length == URLS.length) {
                            // saveData(blob, "fileName.zip");
                            var AllBlobData = new Blob([blob], { type: 'application/zip' });
                            saveData(AllBlobData, "Test.zip");
                            // saveFile("DownloadFiles.zip", "application/zip", files)

                        }
                    });
                });
            });

        });

// Получение записи с использованием метода XMLHttpRequest ().

  function getRawData(urlPath, callback, progress) {
            var request = new XMLHttpRequest();
            request.open("GET", urlPath, true);
            request.setRequestHeader('Accept', '');
            if ('responseType' in request)
                request.responseType = "arraybuffer"
            if (request.overrideMimeType)
                request.overrideMimeType('text/plain; charset=x-user-defined');
            request.send();
            var file, err;
            request.onreadystatechange = function () {
                if (this.readyState === 4) {
                    request.onreadystatechange = null;
                    if (this.status === 200) {
                        try {
                            debugger
                            var file = request.response || request.responseText;
                        } catch (error) {
                            throw error;
                        }
                        callback(err, file);

                    } else {
                        debugger
                        callback(new Error("Ajax Error!!"))
                    }
                } else {
                    debugger
                }
            }
        }

// Для сохранения файла в zip

  var saveData = (function () {
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            return function (data, fileName) {
                // var AllBlobs = new Blob([data], { type: "" });//application/zip  //octet/stream
                // var url = window.URL.createObjectURL(AllBlobs);
                var url = window.URL.createObjectURL(data);
                a.href = url;
                a.download = fileName;
                a.click();
                window.URL.revokeObjectURL(url);
            };
        }());

// Загруженный Zip-файл

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...