You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Apps Script按文件夹ID压缩文件并获取压缩包ID遇阻求助

修正后的Google Drive文件夹压缩方案

原代码存在的问题

  • getBlobs函数的return blobs写在while循环内部,仅能获取文件夹内第一个文件的Blob,无法收集全部文件。
  • Utilities.zip生成的是Blob对象,没有getId()方法,必须将该Blob保存到Drive中才能获取文件ID。
  • 未声明folder、zipFileId等变量,存在隐式全局变量风险。

修正后的完整代码

// 获取指定文件夹内所有文件的Blob集合(保留原文件名)
function getBlobs(folderId) {
  const blobs = [];
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();

  while (files.hasNext()) {
    const file = files.next();
    blobs.push(file.getBlob().setName(file.getName()));
  }
  return blobs;
}

// 将Blob集合压缩并保存到Drive,返回压缩包文件ID
function zipFilesInFolder(folderId, zipFilename) {
  const blobs = getBlobs(folderId);
  if (blobs.length === 0) {
    throw new Error("目标文件夹内无文件可压缩");
  }
  const zipBlob = Utilities.zip(blobs, `${zipFilename}.zip`);
  // 将压缩包保存到Drive根目录,可修改为指定文件夹保存
  const zipFile = DriveApp.createFile(zipBlob);
  Logger.log("压缩包文件ID: " + zipFile.getId());
  return zipFile.getId();
}

// 示例调用
function testZip() {
  const targetFolderId = "123456789a94..."; // 替换为你的目标文件夹ID
  const zipName = "myzip";
  try {
    const zipFileId = zipFilesInFolder(targetFolderId, zipName);
    console.log("压缩完成,文件ID: " + zipFileId);
  } catch (err) {
    console.error(err.message);
  }
}

关键说明

  • getBlobs中通过setName(file.getName())为Blob绑定原文件名,避免压缩包内文件丢失原始名称。
  • zipFilesInFolder新增空文件判断,避免无文件时执行压缩报错;通过DriveApp.createFile(zipBlob)将压缩包Blob保存到Drive,从而获取到合法的文件ID。

步骤b:生成共享下载链接并嵌入HTML

拿到压缩包FileId后,可通过以下代码生成符合共享权限的下载链接,并嵌入HTML模板:

// 根据文件ID生成共享下载链接(适配共享驱动器权限)
function getDownloadLink(fileId) {
  const file = DriveApp.getFileById(fileId);
  // 按共享驱动器权限设置文件可见性,可根据需求调整权限等级
  file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  return file.getDownloadUrl();
}

// 生成包含下载链接的HTML内容
function generateDownloadHtml(zipFileId) {
  const downloadUrl = getDownloadLink(zipFileId);
  return `
    <html>
      <body>
        <h3>压缩包下载</h3>
        <a href="${downloadUrl}" target="_blank">点击下载</a>
      </body>
    </html>
  `;
}

内容的提问来源于stack exchange,提问作者Jakob Czapski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:55:22