Пустой zip-файл с использованием zip.js и browserfs

Я использую две библиотеки zip.js и BrowserFS, и я хочу создать zip-архив в файловой системе из каталога. У меня есть функция, которая перемещается по каталогу:

async function traverseDirectory(dir, callback) {
    var list = await pify(fs.readdir)(dir);
    for (var i = 0; i < list.length; i++) {
        console.info('for ' + i);
        var filename = path.join(dir, list[i]);
        var stat = await pify(fs.stat)(filename);
        if (!filename.match(/^\.{1,2}$/)) {
            if (stat.isDirectory()) {
                await traverseDirectory(filename, callback);
            } else {
                console.info('callback');
                await callback('file', filename);
                console.info('awated');
            }
        }
    }
    await callback('directory', dir);
}

и функция, использующая zip.js для создания архива.

async function makeZip(dir, filepath) {
    var zipWriter = await new Promise(function(resolve, reject) {
        zip.createWriter(new zip.BlobWriter("application/zip"), function(writer) {
            resolve(writer);
        }, reject);
    });
    await traverseDirectory(dir, async function(stat, path) {
        if (stat == 'file') {
            await new Promise(function(resolve, reject) {
                console.info(path);
                fs.readFile(path, function(err, data) {
                    if (err) {
                        return reject(err);
                    }
                    var blob = new Blob([data], {
                        type : "text/plain"
                    });
                    zipWriter.add(path, new zip.BlobReader(blob), resolve);
                });
            });
        }
    });
    console.info('>>>>>>>>>>>>> zip');
    return new Promise(function(resolve, reject) {
        zipWriter.close(function(blob) {
            var fileReader = new FileReader();
            fileReader.onload = function() {
                var arrayBuffer = this.result;
                fs.writeFile(filepath, new buffer.Buffer(arrayBuffer), function(err) {
                    if (err) {
                        reject(err);
                    } else {
                        resolve();
                    }
                });
            };
            fileReader.readAsArrayBuffer(blob);
        });
    });
}

проблема в том, что zip-файл пуст, когда я его загружаю и открываю.

Просто предложение, вы можете рассмотреть возможность использования Promisify для упрощения асинхронных операций вместо использования конструктора Promise.

CertainPerformance 03.06.2018 10:19

@CertainPerformance реорганизовал функцию с помощью pify.

jcubic 03.06.2018 10:31

Думаю, что у этой библиотеки битая JSZip работает намного лучше.

jcubic 14.06.2018 22:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
352
0

Другие вопросы по теме