转移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本身是有效的,问题完全出在文件创建的参数调用环节。
修复方案
有两种正确的调用方式:
- 直接传入Blob对象(推荐,Blob已包含文件名和MIME类型):
// 直接传入设置好名称的Blob entitysStorageFolderOnGDrive.createFile(entityPDFContent);
因为你已经通过responseFromServer.getBlob().setName(entityPDFFileName)给Blob设置了文件名,无需再手动传递名称参数。
- 使用字节数组+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
相关产品推荐
相关产品推荐

