Google Team Drive使用Apps脚本在团队驱动器文件夹之间移动文件

时间:2018-04-05 10:41:01

标签: google-apps-script google-app-maker google-drive-team-drive

我正在Appmaker for Team Drive中创建一个工作流程,我在团队驱动下有3个文件夹:
待批准
批准
REJECTED

我正在从待批准的文件夹中发送文件以供批准,如果用户批准,则该文档应移至APPROVED文件夹。 REJECTED的逻辑相同。

现在我的问题是如何在Team Drive文件夹之间移动文档。 DriveApp.getFolderById(folderId).addFile()无效,因为我在Team Drive中不能拥有多个父级。 DriveApp.getFolderById(folderId).createFile()正在运行,但它正在使用新ID创建一个全新的文件,这不符合我的批准工作流程的目的,因为这是一个全新的文件。

有没有办法移动文件或复制/替换任何不会改变我文件ID的操作?我也试过REST API,但是找不到任何。

1 个答案:

答案 0 :(得分:7)

好像我找到了答案,通过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作为服务。