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

使用Google Apps Script从Google Drive下载文件出现403错误如何解决

Google Apps Script Drive文件下载403错误解决方法

问题原因

你遇到的403错误是近期Google对drive.google.com/uc下载端点的安全校验策略更新导致的:内嵌在Apps Script模态对话框内的跳转请求,携带的用户认证cookie上下文和Google Drive主站不匹配,会被权限拦截;直接粘贴链接到地址栏能正常下载,是因为地址栏请求携带了完整的认证凭据,所以你之前做的账号登出、权限调整操作都无法解决该问题。

可行修复方案

方案1:使用带OAuth令牌的下载链接(最稳定)

修改原代码的下载链接生成逻辑,直接给下载地址追加当前脚本的有效访问令牌,绕开cookie校验:

// 替换原dlUrl生成行即可
var dlUrl = file.getDownloadUrl() + "&access_token=" + ScriptApp.getOAuthToken();

// 后续原有逻辑保持不变
// Open a dialog and run Javascript for downloading the file.
var str = '<script>window.location.href="' + dlUrl + '"</script>';
var html = HtmlService.createHtmlOutput(str);
SpreadsheetApp.getUi().showModalDialog(html, "Downloading invoice ... please wait");

// 建议把删除文件的逻辑延后,避免下载未完成就删除文件
Utilities.sleep(5000); // 可以适当延长等待时间
file.setTrashed(true);
var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
SpreadsheetApp.getUi().showModalDialog(closeHtml, "Downloading invoice ... please wait");

注意:如果运行时报权限错误,可在脚本任意位置添加一行注释代码// DriveApp.getFiles(),重新运行触发Drive权限授权即可。

方案2:改用a标签自动点击触发下载

如果不想修改链接生成逻辑,也可以把模态框内的跳转逻辑换成HTML5下载标签触发,降低被拦截的概率:

var dlUrl = "https://drive.google.com/uc?export=download&id=" + file.getId();
// 替换原str变量的内容
var str = '<a href="' + dlUrl + '" id="dlBtn" download style="display:none"></a><script>document.getElementById("dlBtn").click()</script>';
// 后续逻辑保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:04