File 谷歌应用程序脚本-如何替换文件?

File 谷歌应用程序脚本-如何替换文件?,file,pdf,google-apps-script,google-drive-api,File,Pdf,Google Apps Script,Google Drive Api,我正在尝试使用脚本替换Google Drive文件夹中的PDF文件。由于GAS不提供添加修订(版本)的方法,我试图替换文件的内容,但我得到的只是一个空白的PDF 我不能使用DriveApp.File类,因为我们的管理员已经禁用了新的API,所以我必须使用DocsList.File 输入: OldFile.pdf(8页) NewFile.pdf(20页) 预期输出: 与NewFile.pdf内容相同的OldFile.pdf 实际输出: OldFile.pdf,20页空白 过程: v

我正在尝试使用脚本替换Google Drive文件夹中的PDF文件。由于GAS不提供添加修订(版本)的方法,我试图替换文件的内容,但我得到的只是一个空白的PDF

我不能使用DriveApp.File类,因为我们的管理员已经禁用了新的API,所以我必须使用DocsList.File

  • 输入:
    • OldFile.pdf(8页)
    • NewFile.pdf(20页)
  • 预期输出:
    • 与NewFile.pdf内容相同的OldFile.pdf
  • 实际输出:
    • OldFile.pdf,20页空白
过程:

var old = DocsList.getFileById("####");
var new = DocsList.getFileById("####");
old.replace(new.getContentAsString());
有什么想法吗? 先谢谢你


注:我也尝试先调用old.clear(),但我认为问题在于getContentAsString方法。

尝试将其作为blob数据类型。

可以用来替换Google Drive中现有PDF文件的内容。此答案还包括如何在共享驱动器中更新PDF文件的示例

function overwriteFile(blobOfNewContent,currentFileID) {
  var currentFile;
  
  currentFile = DriveApp.getFileById(currentFileID);    
  
  if (currentFile) {//If there is a truthy value for the current file
    Drive.Files.update({
      title: currentFile.getName(), mimeType: currentFile.getMimeType()
    }, currentFile.getId(), blobOfNewContent);
  }
}
参考资料

与共享驱动器一起使用的示例:

Drive.Files.update({ title: currentFile.getName(), mimeType: 
  currentFile.getMimeType() }, currentFile.getId(), blobOfNewContent, 
  {supportsTeamDrives: true});

getContentAsString()
闻起来像是根据一些字符编码进行解码,例如UTF-8,这将有效地破坏一些PDF内容,例如通常被压缩的页面内容流,因此对更改非常敏感。您需要保留相同的文档ID吗?如果没有,您可以简单地删除和重命名…是的,我需要相同的ID,因为它是从web链接的。您可以使用来自的解决方案。基本上,您使用的是Drive.Files.update(file,fileId,updatedBlob)API,如果您通过Resources>AdvancedGoogleServices>DriveAPI>ONI激活该API,您也会尝试使用该API,但结果是一样的。old.replace(new.getBlob().getDataAsString());它会产生相同的结果,即无法读取的pdf。不要将其转换为字符串。有很多方法可以从blob创建文件。我知道。我可以从blob创建一个文件,这非常好。我的问题是,我需要覆盖文件的内容,以保留其ID。然后,不可能从本机应用程序脚本API执行您想要的操作。您需要使用驱动器API(该API已被阻止)上载文件的新修订版,此外,您还必须在使用team drive之前(而不是使用getDataAsString:)确定如何编辑该修订版。如果使用team drive,您的调用将类似于
drive.Files.update({title:currentFile.getName(),mimeType:currentFile.getMimeType()},currentFile.getId(),blobOfNewContent,{supportsTeamDrives:true})