如何解决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 Snippets/ |
SO Snippets/addCheckboxes |
SO Snippets/appendIdtolocalStorage |
SO Snippets/clearAllIdsFromLocalStorage |
SO Snippets/clearIdsFromLocalStorage |
SO Snippets/dataUrl |
SO Snippets/delCheckedQuestion |
SO Snippets/delCheckedQuestions |
SO Snippets/delUnWantedQuestions |
SO Snippets/getCurrentIdsInLocalStorage |
SO Snippets/loadIdsIntoLocalStorage |
SO Snippets/refreshPage |
SO Snippets/remDupsSort |
SO Snippets/removeFooter%26SideBar |
SO Snippets/removeSomeIds |
SO Snippets/removeSomeOlderIds |
SO Snippets/viewCookies |
SO Snippets/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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。