从指定URL下载PDF至Google Drive时内容异常的技术问询
解决Google Apps Script下载Google文档PDF到Drive时的内容异常与鉴权问题
初始问题
需要从以下格式的链接下载PDF并保存到Google Drive文件夹:
fileURL = "https://docs.google.com/feeds/download/documents/export/Export?id=<...DOCID...>&revision=3970&exportFormat=pdf"
编写了如下代码,但生成的文件仅包含"Blob"字样而非实际内容:
function dFile(fileName,fileURL) { var response = UrlFetchApp.fetch(fileURL); var fileBlob = response.getBlob().getAs('application/pdf'); var folder = DriveApp.getFolderById('..folderID..'); var result = folder.createFile(fileName,fileBlob,MimeType.PDF); Logger.log("file created"); }
如何获取到实际的PDF文件?
更新情况
更新代码后,生成的PDF显示登录提示(见下图),推测需要鉴权,但不确定操作方式,且已在清单中配置了所有鉴权项:
function dFile(fileName,fileURL) { var response = UrlFetchApp.fetch(fileURL); var fileBlob = response.getBlob().getAs('application/pdf'); var folder = DriveApp.getFolderById('..folderID..'); var result = folder.createFile(fileBlob).setName(fileName); Logger.log("file created"); }

解决方案
1. 修复Blob内容异常问题
最初的代码错误使用了createFile(name, content, mimeType)方法——这个方法的第二个参数要求是字符串内容,而非Blob对象,因此才会生成仅显示"Blob"的无效文件。正确做法是使用接收Blob的createFile(blob)方法,也就是你更新后的写法,但还需要解决鉴权问题。
2. 解决登录鉴权问题
通过UrlFetchApp.fetch请求Google文档导出链接时,必须携带当前脚本的授权身份,即添加OAuth令牌到请求头中,具体实现如下:
方法一:添加OAuth令牌请求
修改UrlFetchApp.fetch的参数,加入携带令牌的请求头:
function dFile(fileName, fileURL) { // 获取当前脚本的OAuth访问令牌 var token = ScriptApp.getOAuthToken(); // 配置请求头,携带鉴权令牌 var options = { headers: { 'Authorization': 'Bearer ' + token } }; // 发送带鉴权的请求 var response = UrlFetchApp.fetch(fileURL, options); var fileBlob = response.getBlob(); // 将Blob直接存入Drive,无需强制转换类型 var folder = DriveApp.getFolderById('你的文件夹ID'); var result = folder.createFile(fileBlob).setName(fileName); Logger.log("文件已创建,ID:" + result.getId()); }
方法二:改用Drive API直接导出(更可靠)
如果上述方法仍有问题,可直接使用官方Drive API的files.export方法导出文档,这种方式更规范,鉴权逻辑更稳定:
- 在脚本编辑器中启用Drive API:点击「资源」→「高级Google服务」,找到「Drive API」并开启。
- 使用以下代码(调用时传入文档ID而非完整导出URL):
function dFile(fileName, docId) { // 通过文档ID直接导出PDF格式 var blob = Drive.Files.export(docId, 'application/pdf'); var folder = DriveApp.getFolderById('你的文件夹ID'); var result = folder.createFile(blob).setName(fileName); Logger.log("文件已创建,ID:" + result.getId()); }
注意事项
- 确保运行脚本的账号拥有目标文档的访问权限(查看或编辑权限均可)。
- 启用Drive API后,脚本会自动配置所需的OAuth权限范围,无需手动在清单中添加多余项。
内容的提问来源于stack exchange,提问作者Filippo
相关产品推荐
相关产品推荐

