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

转移Apps Script所有权后生成PDF仅含'blob'的问题

问题根源与修复方案

核心错误:错误使用DriveApp.Folder.createFile的重载方法

你遇到的问题是调用createFile时参数传递错误,导致Blob对象被强制转换为字符串"blob",最终生成的PDF文件内容就是这个仅4字节的字符串。

具体问题点

代码中这一行存在参数类型不匹配:

entitysStorageFolderOnGDrive.createFile(entityPDFFileName, entityPDFContent, MimeType.PDF);

createFile(name, content, mimeType)这个重载方法的第二个参数要求是字符串或字节数组,但你传入的是Blob类型的entityPDFContent。当Blob被传入这个参数位置时,会被自动转为字符串"blob",这就是生成异常文件的原因。

而日志中responseFromServer.getBlob().getDataAsString()显示正常,说明从UrlFetch获取的Blob本身是有效的,问题完全出在文件创建的参数调用环节。

修复方案

有两种正确的调用方式:

  1. 直接传入Blob对象(推荐,Blob已包含文件名和MIME类型):
// 直接传入设置好名称的Blob
entitysStorageFolderOnGDrive.createFile(entityPDFContent);

因为你已经通过responseFromServer.getBlob().setName(entityPDFFileName)给Blob设置了文件名,无需再手动传递名称参数。

  1. 使用字节数组+MIME类型的重载(手动控制场景):
// 将Blob转为字节数组后传入
entitysStorageFolderOnGDrive.createFile(entityPDFFileName, entityPDFContent.getBytes(), MimeType.PDF);

修改后的关键代码片段

替换原文件创建部分的代码:

if ( !driveFileExists(entitysStorageFolderOnGDrive,entityPDFFileName) ) {
  var responseFromServer = UrlFetchApp.fetch(exportLink, exportParams);
  Logger.log(responseFromServer.getBlob().getDataAsString())
  var entityPDFContent = responseFromServer.getBlob().setName(entityPDFFileName);
  // 使用正确的重载方法创建文件
  entitysStorageFolderOnGDrive.createFile(entityPDFContent);
  success = true;
}

开发阶段正常的原因推测

开发阶段可能因你的账号权限或Apps Script的旧版本兼容行为,这个参数错误未被触发;所有权转移后,Alan的环境严格遵循方法参数类型要求,导致问题显现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:13:16