Пустой zip-файл с использованием zip.js и browserfs - PullRequest
0 голосов
/ 03 июня 2018

Я использую две библиотеки 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.log('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.log('callback');
                await callback('file', filename);
                console.log('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.log(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.log('>>>>>>>>>>>>> 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-файл пусти открой.

...