javascript - JSZip 复制文件并在创建新 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 新手,但我相信我已经缩小了问题的范围。
第一个问题是文件重复,因为 console.log 输出告诉我在 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, …}
下一个问题是可能与上述问题直接相关的错误:
未捕获(承诺)错误:无法读取“example_file.docx”的数据。是否是受支持的 JavaScript 类型(String、Blob、ArrayBuffer 等)
此错误总共输出到控制台 4 次,并引用了 4 个文件。我确定这是由于我的 zip.generateAsync 代码存在问题,但从未使用过 Blob 或 Promises,我不确定问题的根本原因是什么。
最后,我不确定如何将新生成的 zip 文件(如果我可以正确生成)保存在内存中并将其发送到下一个函数。现在有代码可以将其保存在本地,但这不是最终目标,更像是一个占位符。
对于这些问题的任何帮助将不胜感激,即使它只是一个提示或朝着正确方向迈出的一步。
解决方案
推荐阅读
- python - 如何将图像的轮廓保存为另一张图像?
- python - 如何创建使用 pybind 创建的 python 包?
- react-native - 如何使用酶玩笑在本机反应中编写导航堆栈的单元测试用例?
- python - 使用 Django-q 的 Django 计划任务
- google-sheets - 谷歌电子表格 - If() SUM
- mysql - 如何使用 Vitess 增加分片
- mongodb - 如何让 MongoDB $map 运算符返回值数组而不是任何对象数组?
- wpf - 如何在 Windows 中创建后台进程应用程序?
- angular - 基于条件的动态验证
- java - 运行 java 时,Gradle 任务运行以非零退出值 100 完成