javascript - JSZip 库,检查 zipfile 是否加密
问题描述
美好的一天,我想知道如何使用 JSZip 库检查 zip 文件是否已加密。我目前尝试执行 loadAsync 函数,然后如果它转到 .catch() 我总是认为它的原因是因为它是加密的。我知道应该有更好的方法来做到这一点,所以我尝试检查库本身,然后找到调用 isEncrypted() 函数的条目。我只是不知道如何访问这些条目。有谁知道怎么做?
if (hasZipFileFlag === true) {
var jszip = new JSZip();
try {
await jszip.loadAsync(testZip).then(function(res) {
UtilLogClass.logFunc('ZIP READ SUCCESSFULLY', res);
}).catch((err) => {
UtilLogClass.logFunc('jszip loadAsync then() ERROR', err);
zipFileHasPassFlag = true;
});
} catch (err) {
UtilLogClass.logFunc('ZIP READ ERROR', err);
}
}
※testZip 已经是一个具有“application/x-zip-compressed”类型的 DOM 对象,我已经有办法确定它是否是一个 zip 文件。
解决方案
从JSZip
限制文档看来,这是不可能的:
并非 zip 文件的所有功能都受支持。经典 zip 文件可以工作,但不支持加密 zip、多卷等,并且 loadAsync() 方法将返回失败的承诺。
编辑(根据评论):
您可以将代码重构为如下所示:
if (hasZipFileFlag === true) {
var jszip = new JSZip();
try {
const res = await jszip.loadAsync(testZip);
UtilLogClass.logFunc("ZIP READ SUCCESSFULLY", res);
} catch (err) {
// if(err === "encrypted error from JSZip") { ... }
zipFileHasPassFlag = true;
UtilLogClass.logFunc("ZIP READ ERROR", err);
}
}
该方法抛出的任何错误loadAync(...)
都将被catch
块捕获。
推荐阅读
- asp.net-mvc - MVC 中用于 http 请求的自定义错误页面
- php - 如何让紧凑型忽略不存在的变量?
- css - 在 Reactjs 中激活 Nav-Item
- python - 你真的可以在 python 中声明变量的数据类型吗?
- python - 自定义 JSON 编码器无法扩展
- vb.net - RichTextBox SelectionColor 在我更改字体大小时更改
- python-3.x - python 可执行文件出错:无法从 tkinter 导入名称 ttk
- qt - 如何避免 QtQuick.Controls Button.qml 错误的父级用于 transitionDuration(第 77 行)
- python - 使用 Python Great Expectations 删除无效数据
- javascript - 右键单击 => 在 Angular 或 JS 中打印事件函数