Мой существующий код позволяет пользователям загружать заархивированный файл и передает этот файл в другую функцию для дальнейшей обработки.В промежутке между этими шагами я хотел бы добавить логику, которая проверяет содержимое заархивированных файлов, вносит любые необходимые изменения и передает новый 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-файл (если я мог бы сгенерировать его должным образом) в памяти и отправить его следующей функции.Прямо сейчас есть код для локального сохранения, но это не конечная цель, а скорее заполнитель.
Любая помощь по этим вопросам будет высоко ценится, даже если это просто подсказка или шаг вправильное направление.