【问题标题】:JSZip library, checking if zipfile is encrypted or notJSZip 库,检查 zipfile 是否加密
【发布时间】:2020-11-26 07:49:49
【问题描述】:

美好的一天,我想知道如何检查 zip 文件是否已加密或未使用 JSZip 库。我目前尝试执行 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 文件。

【问题讨论】:

    标签: javascript jszip


    【解决方案1】:

    JSZiplimitations docs看来是不可能的:

    并非支持 zip 文件的所有功能。经典 zip 文件可以工作,但不支持加密 zip、多卷等,并且 loadAsync() 方法将返回失败的承诺。

    编辑(每 cmets):

    你可以把你的代码重构成这样:

    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 块捕获。

    【讨论】:

    • 我明白了,感谢您通知我。那么可以假设我现在所做的事情是正确的吗?
    • 您可以删除 .then(...).catch(...) 调用,因为您使用的是 awaittry/catch 块。可悲的是,我认为没有办法在不解析错误字符串的情况下确定错误是否是“加密”错误。免责声明:我以前从未使用过JSZip 库。
    • 我明白了,谢谢你的帮助,所以最后我应该把错误变成字符串吗?我试过了,但不太顺利,有什么建议吗?
    • 我用更多的上下文来更新我的答案。如果还不清楚,请告诉我。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2020-07-03
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多