javascript - Utilities.unzip 不适用于包含子文件夹的 zip 文件
问题描述
我正在尝试编写一些 Google Apps 脚本来提取一个包含 3 个子文件夹的 zip 文件。根据文件夹,我将运行各种文件并相应地处理它们。
当 zip 文件包含子文件夹时,我无法让 Utilities.unzip 工作。我用一个简单的 zip 文件测试了我的代码,它按预期工作,所以我猜这是我缺少的东西,或者 .unzip 根本不适用于子文件夹。
反正有没有让这个工作?或者我可以通过 javascript 提取文件并将它们传递给应用程序脚本吗?我查看了几个执行此操作的 javascript 库,但不知道如何将它们导入我的 Google Web App。
更新:这是我用来测试的代码:
function ExtractSecurityZip() {
var iZIP =DriveApp.getFileById("1RAhI_mGQHay9boCQ9tt5T_0iqF6w5Eky").getBlob().setContentTypeFromExtension()
Utilities.unzip(iZIP)
return
}
我不关心维护 zip 文件中的文件夹结构,我只需要所有文件。
任何帮助是极大的赞赏。
戴夫
PS:如果有帮助,zip 文件是 Oracle LCM 导出文件,所以我无法删除文件夹结构。
解决方案
这会将所有文件解压缩到目标目录
function getAllZips(dstdir,zipid) {
const dstFolder = DriveApp.getFolderById(dstdir);
const zipFile = DriveApp.getFileById(zipid);
const blobs = Utilities.unzip(zipFile.getBlob());
blobs.forEach((b,i) => {
let pA = b.getName().split('/');
if(pA[pA.length-1]) {
dstFolder.createFile(b).setName(pA[pA.length-1]);
}
});
}
这是通过 blobs.getName() 循环显示的内容:
姓名 |
---|
SO片段/ |
SO Snippets/addCheckboxes |
SO片段/appendIdtolocalStorage |
SO 片段/clearAllIdsFromLocalStorage |
SO 片段/clearIdsFromLocalStorage |
SO片段/dataUrl |
SO片段/delCheckedQuestion |
SO Snippets/delCheckedQuestions |
SO Snippets/delUnWantedQuestions |
SO 片段/getCurrentIdsInLocalStorage |
SO 片段/loadIdsIntoLocalStorage |
SO片段/刷新页面 |
SO 片段/remDupsSort |
SO Snippets/removeFooter%26SideBar |
SO 片段/removeSomeIds |
SO Snippets/removeSomeOlderIds |
SO片段/viewCookies |
SO片段/zButton |
以“/”结尾的是目录,其他的是文件。我试图恢复目录结构,但它比我想象的要多一些工作。因此,您可能希望将 Javascript 标记添加到标记列表中。我的猜测是他们中的一个已经想通了。
关于 andrewjames 提出的问题:你能在你的 zip 文件上运行它,以便我可以看到它的样子吗?
function lookingInTheBlob(zipid='1QnrP-1lngoLQtNsqd373_UytVptuqoI1') {
const zipFile = DriveApp.getFileById(zipid);
const blobs = Utilities.unzip(zipFile.getBlob());
let data = [];
blobs.forEach((b,i) => {data.push([b.getName()]);});
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet3');
sh.clearContents();
sh.getRange(1,1,data.length,data[0].length).setValues(data);
}
推荐阅读
- android - 无法同步项目
- javascript - 用于在 unpkg 中搜索包/库的 api,例如 cdnjsAPI?
- list - 如何使用列表中的项目作为 LISP 中函数的参数?
- c++ - 如果 x 的值定义为“int x;”会发生什么 和 y 的值定义为“int y = 1;” 并在 C++ 中使用 min(x,y)?
- python - 使用带有 SQL 语句的 for 循环插入多个递增 1 的值
- c++ - 接受可变参数 lambda 时的 std::function 签名
- android - 启动画面在 React Native Android 上快速变为白色
- node.js - Is there any solution to where I can check and handle if browser UI has been closed?
- javascript - Jquery - 单击时仅更改附加参数一次
- tensorflow - 组合多个张量流模型