优化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
相关产品推荐
相关产品推荐

