Google Drive文件解压异常:无报错但未生成解压文件夹
问题
尝试解压Google Drive文件夹内的压缩文件,分别测试了两类压缩包:一类是从Gmail下载的包含xlsx文件的压缩包,另一类是我上传到Drive的包含jpg文件的压缩包。执行脚本时未出现任何错误,执行日志显示“Unzipping completed”,但始终未生成解压后的文件夹。
原脚本代码:
var folderId = "Folder_ID"; // 使用Google Drive API获取文件夹内容 var folder = DriveApp.getFolderById(folderId); var files = folder.getFiles(); // 创建空数组存储文件夹内文件的blob var blobs = []; // 遍历文件夹内的每个文件,将其blob添加到数组中 while (files.hasNext()) { var file = files.next(); blobs.push(file.getBlob()); } // zip变量指向包含文件夹所有文件的压缩包blob var zip = Utilities.zip(blobs, "folder_contents.zip"); Logger.log(zip); // 解压该blob var unzippedFiles = Utilities.unzip(zip); // 输出解压后文件的名称 for (var i = 0; i < unzippedFiles.length; i++) { Logger.log(unzippedFiles[i].getName()); } Logger.log("Unzipping completed."); }
解决方案
原脚本存在两个核心问题:
- 逻辑偏离需求:它没有解压文件夹内的目标压缩包,反而把文件夹内所有文件(包括你的压缩包)重新打包成新zip,再解压这个自制zip
- 解压后的文件仅存于内存,未写入Google Drive,因此看不到实际文件
修改后的脚本会:
- 筛选出文件夹内的所有
.zip格式文件 - 逐个解压这些压缩包
- 将解压后的文件保存到指定Google Drive文件夹
修改代码如下:
var folderId = "你的文件夹ID"; // 替换为目标文件夹ID var targetFolder = DriveApp.getFolderById(folderId); // 解压文件将保存到这个文件夹 // 获取文件夹内所有文件 var files = targetFolder.getFiles(); while (files.hasNext()) { var file = files.next(); // 仅处理zip格式的压缩文件 if (file.getMimeType() === "application/zip") { Logger.log("正在解压:" + file.getName()); // 解压当前压缩包 var unzippedBlobs = Utilities.unzip(file.getBlob()); // 将每个解压后的文件保存到Drive unzippedBlobs.forEach(function(blob) { targetFolder.createFile(blob); Logger.log("已保存:" + blob.getName()); }); } } Logger.log("解压完成");
内容的提问来源于stack exchange,提问作者Pelin
相关产品推荐
相关产品推荐

