JSZip дублирование файлов и ошибки при создании нового zip - PullRequest
0 голосов
/ 26 февраля 2019

Мой существующий код позволяет пользователям загружать заархивированный файл и передает этот файл в другую функцию для дальнейшей обработки.В промежутке между этими шагами я хотел бы добавить логику, которая проверяет содержимое заархивированных файлов, вносит любые необходимые изменения и передает новый zip-файл.Я написал следующее:

JSZip.loadAsync(file).then(function(zip) {
    zip.forEach(function(relativePath, zipEntry) {
        //Change extension name
        fName = zipEntry.name.substr(0, zipEntry.name.lastIndexOf(".")) + ".docx";
        zip.file(fName, zipEntry, { compression: "DEFLATE" });
        console.log(zip.file(fName, zipEntry, { compression: "DEFLATE" }));
        zip.generateAsync({type: "blob"}).then(function(content) {
            saveAs(content, "test.zip");
        });
    });
});

Я, по общему признанию, новичок в JavaScript, но я считаю, что я сузил проблемы.

Первая проблема - дублирование файлов, как консоли.вывод журнала говорит мне, что в объекте JSZip найдено 4 файла, но исходная загрузка содержала только 2 файла, «example_file.doc» и «example_file2.doc»:

example_file.doc: ZipObject {name: "example_file.docx", dir: false, date: Wed Feb 20 2019 08:42:58 GMT-0500 (Eastern Daylight Time), comment: null, unixPermissions: null, …}
example_file.docx: ZipObject {name: "example_file.docx", dir: false, date: Tue Feb 26 2019 11:39:23 GMT-0500 (Eastern Standard Time), comment: null, unixPermissions: null, …}
example_file2.doc: ZipObject {name: "example_file2.docx", dir: false, date: Wed Feb 20 2019 09:07:04 GMT-0500 (Eastern Daylight Time), comment: null, unixPermissions: null, …}
example_file2.docx: ZipObject {name: "example_file2.docx", dir: false, date: Tue Feb 26 2019 11:39:23 GMT-0500 (Eastern Standard Time), comment: null, unixPermissions: null, …}

Следующая ошибка - ошибкаэто, вероятно, непосредственно связано с вышеуказанной проблемой:

Uncaught (в обещании) Ошибка: не удается прочитать данные файла example_file.docx.В поддерживаемом типе JavaScript (String, Blob, ArrayBuffer и т. Д.)

Эта ошибка выводит на консоль 4 раза и ссылается на 4 файла.Я уверен, что это связано с проблемой в моем коде zip.generateAsync, но, поскольку я никогда не работал с Blobs или Promises, я не уверен, что является основной причиной проблемы.

Наконец, яне знаете, как сохранить вновь сгенерированный zip-файл (если я мог бы сгенерировать его должным образом) в памяти и отправить его следующей функции.Прямо сейчас есть код для локального сохранения, но это не конечная цель, а скорее заполнитель.

Любая помощь по этим вопросам будет высоко ценится, даже если это просто подсказка или шаг вправильное направление.

...