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

优化Google Apps Script实现Google Drive ZIP文件快速下载

优化Google Sheets按钮绑定的Google Apps Script ZIP下载功能:快速且可正常解压

问题分析

你提到的TheMaster原始方案下载速度快但ZIP无法解压,本质原因是下载过程中二进制内容被错误地以文本编码处理,导致ZIP文件结构损坏(从文件大小差异也能看出:正常ZIP是870KB,损坏的是1.1MB,说明额外插入了转码后的字符)。而延迟问题是因为之前的方案依赖对话框加载完成的时间,我们可以通过直接构造正确的二进制下载链接来解决这两个问题。

优化后的实现代码

function downloadFastValidZip() {
  // 替换为你的Google Drive ZIP文件ID
  const fileId = "YOUR_ZIP_FILE_ID";
  const file = DriveApp.getFileById(fileId);
  
  // 获取文件的二进制Blob,确保MIME类型正确
  const blob = file.getBlob();
  const contentType = blob.getContentType();
  const fileName = file.getName();
  
  // 构造直接触发二进制下载的HTML内容,无需延迟
  const html = `
    <script>
      // 创建隐藏的下载链接
      const a = document.createElement('a');
      a.href = 'data:${contentType};base64,${Utilities.base64Encode(blob.getBytes())}';
      a.download = '${fileName}';
      // 触发点击下载
      a.click();
      // 立即关闭对话框
      google.script.host.close();
    </script>
  `;
  
  // 打开无模态对话框,直接执行下载逻辑
  SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutput(html), '正在下载...');
}

关键改进点

  • 二进制内容正确处理:使用Utilities.base64Encode(blob.getBytes())直接编码文件的二进制字节,避免文本转码导致的ZIP损坏
  • 无延迟触发下载:对话框加载后立即执行下载并关闭,无需等待5秒延迟
  • 保留快速特性:直接通过Data URI触发下载,跳过了不必要的中间环节,保持原始方案的速度优势

验证说明

  • 执行此函数后,下载的ZIP文件大小应与Drive中原始文件一致(约870KB),且可正常解压
  • 绑定到Google Sheets按钮后,点击即可立即触发下载,无需等待延迟

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:53:13