【问题标题】:File movement between Google Shared Drive (team drive) folders using Apps Script使用 Apps 脚本在 Google 共享驱动器(团队驱动器)文件夹之间移动文件
【发布时间】:2018-04-05 10:41:00
【问题描述】:

我正在为共享云端硬盘(团队云端硬盘)创建工作流程,其中团队云端硬盘下有 3 个文件夹:
待批准
已批准
拒绝

我正在从 TO BE APPROVED 文件夹发送一个文档以供批准,如果用户批准它,那么该文档应该移动到 APPROVED 文件夹。 REJECTED 的逻辑相同。

现在我的问题是如何在共享云端硬盘文件夹之间移动文档。 DriveApp.getFolderById(folderId).addFile() 无法正常工作,因为我在 Team Drive 中不能有多个家长。 DriveApp.getFolderById(folderId).createFile() 正在工作,但它正在使用新 ID 创建一个全新的文件,这不符合我批准工作流程的目的,因为这是一个全新的文件。

有什么方法可以移动文件或复制/替换任何不会更改文件 ID 的操作?我也尝试了 REST API,但没有找到。

【问题讨论】:

  • 您必须使用 Drive REST API 直接操作父母列表。这是一项高级服务,必须在使用前启用。
  • 是的@tehhowch,我已经更新了答案。我只使用 REST 完成了它。

标签: google-apps-script google-drive-api google-drive-shared-drive


【解决方案1】:

好吧,看来我找到了答案,通过 REST API 我可以更新文件的父级。我已经打了这个电话,它正在工作。

这是示例。

var apiUrl = "https://www.googleapis.com/drive/v3/files/fileId?addParents=newFolderId&removeParents=oldFolderId&supportsTeamDrives=true";
var token = ScriptApp.getOAuthToken();
var header = {"Authorization":"Bearer " + token};
var options = {
"method":"PATCH",
"headers": header
};
var res = UrlFetchApp.fetch(apiUrl, options);

更新 使用 Advance Services API,我们可以达到同样的效果,这是我从 Aliaksei Ivaneichyk

收到的答案
function moveFileToFolder(fileId, newFolderId) {  
  var file = Drive.Files.get(fileId, {supportsTeamDrives: true});

  Drive.Files.patch(file, fileId, {
    removeParents: file.parents.map(function(f) { return f.id; }),
    addParents: [newFolderId],
    supportsTeamDrives: true
  });
}

如果您使用 Appscript,则需要在此处启用 Drive SDK 高级服务。如果 Appmaker 在设置选项中添加 Drive SDK 作为服务。

【讨论】:

  • 当然!!感谢您的支持。
  • 如果其他人发现此答案有用,supportTeamDrives 已弃用,并已替换为 supportAllDrives。此外,supportsAllDrives 也将在 2020 年 6 月停用,从那时起将自动支持团队驱动器。
  • 非常感谢@DarpanSanghavi!这正是我所需要的。
猜你喜欢
  • 2019-10-16
  • 2019-12-31
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
相关资源
最近更新 更多