访问团队云端硬盘中的文件和文件夹
Accessing Files and Folders in Team Drive
我正在使用 Google Apps 脚本和驱动器的 V2 API(我认为脚本中还没有 V3)在团队驱动器中自动创建文件。我想用脚本添加编辑器,但没有成功。
我可以使用标准 DriveApp
方法中的 FolderIterator
访问团队云端硬盘和子文件夹。
尝试 1
function addUserToTeam(email, folders) {
// Open the team drive and get all the folders
var teamFolders = DriveApp.getFolderById('TEAMDRIVEIDSTRING').getFolders();
var folders = ["folderIdToMatch"] // This may hold multiple folders
try {
// Loop an array of folder IDs
for(var i=0; i<folders.length; i++) {
// Check the team drive folders for a matching name
while(teamFolders.hasNext()) {
var teamFolder = teamFolders.next();
if(folders[i] == teamFolder.getId()) {
teamFolder.addEditor(email);
}
}
}
} catch(e) {
Logger.log(e);
}
}
失败 Exception: Cannot use this operation on a Team Drive item
。
尝试 2
我通过将 teamFolder.addEditor(email)
替换为 Permissions
资源来尝试驱动器 API:
if(folders[i] == teamFolder.getId()) {
var resource = {
"type":"user",
"role":"writer",
"value": email
}
Drive.Permissions.insert(resource, teamFolder.getId());
}
失败并出现 File not found
错误。
我可以用DriveApp
方法找到文件夹(或文件)。对驱动器 API 的任何尝试都失败了。
我找不到任何说明 API 无法访问团队云端硬盘文件的文档。我的方法有问题吗?
经过更多的研究和挖掘,这里是为有类似用例的人提供的解决方案。
您可以访问整个团队云端硬盘的文件或访问云端硬盘中的文件,但不能访问文件夹。这样做是为了防止不小心将敏感信息目录的访问权授予不应访问的人。
要授予访问权限,supportsTeamDrives
是请求正文中的可选参数,它采用 boolean
值。将其设置为 true
并传入 API 调用。下面是一个成功的函数。
实现我描述的结果的唯一方法是使用多个团队云端硬盘并根据某些事件授予用户访问权限。另一种选择是在项目期间将用户提升为完全权限(从编辑或查看),然后在完成后撤销。
将用户添加到团队云端硬盘
(这也适用于驱动器中的单个文件)
// Using Google Apps Script with v2 of the Drive API enabled
function addToTeamDrive() {
var resource = {
'value': emailString,
'type': 'user',
'role': 'writer'
}
// If you have several Team Drives, loop through and give access
try {
var TeamDrive = Drive.Teamdrives.list();
for(var i = 0; i < TeamDrive.items.length; i++) {
if(TeamDrive.items[i].name === "Team Drive String") {
// This ID may also be a single file inside a Team Drive
var id = TeamDrive.items[i].id;
}
}
// Add user permissions to the matched Drive
Drive.Permissions.insert(resource, id, {"supportsTeamDrives": true});
} catch(e) {
Logger.log(e);
}
}
您可以访问,但即使您拥有完全访问权限,也有很多您无法执行的操作,例如 removeFile()
或 getUrl()
。你仍然会得到
{error: "Exception: Cannot use this operation on a Team Drive item."}
解决方法是在 files/folders 上使用 setTrashed()
而不是 removeFile()
。
我正在使用 Google Apps 脚本和驱动器的 V2 API(我认为脚本中还没有 V3)在团队驱动器中自动创建文件。我想用脚本添加编辑器,但没有成功。
我可以使用标准 DriveApp
方法中的 FolderIterator
访问团队云端硬盘和子文件夹。
尝试 1
function addUserToTeam(email, folders) {
// Open the team drive and get all the folders
var teamFolders = DriveApp.getFolderById('TEAMDRIVEIDSTRING').getFolders();
var folders = ["folderIdToMatch"] // This may hold multiple folders
try {
// Loop an array of folder IDs
for(var i=0; i<folders.length; i++) {
// Check the team drive folders for a matching name
while(teamFolders.hasNext()) {
var teamFolder = teamFolders.next();
if(folders[i] == teamFolder.getId()) {
teamFolder.addEditor(email);
}
}
}
} catch(e) {
Logger.log(e);
}
}
失败 Exception: Cannot use this operation on a Team Drive item
。
尝试 2
我通过将 teamFolder.addEditor(email)
替换为 Permissions
资源来尝试驱动器 API:
if(folders[i] == teamFolder.getId()) {
var resource = {
"type":"user",
"role":"writer",
"value": email
}
Drive.Permissions.insert(resource, teamFolder.getId());
}
失败并出现 File not found
错误。
我可以用DriveApp
方法找到文件夹(或文件)。对驱动器 API 的任何尝试都失败了。
我找不到任何说明 API 无法访问团队云端硬盘文件的文档。我的方法有问题吗?
经过更多的研究和挖掘,这里是为有类似用例的人提供的解决方案。
您可以访问整个团队云端硬盘的文件或访问云端硬盘中的文件,但不能访问文件夹。这样做是为了防止不小心将敏感信息目录的访问权授予不应访问的人。
要授予访问权限,
supportsTeamDrives
是请求正文中的可选参数,它采用boolean
值。将其设置为true
并传入 API 调用。下面是一个成功的函数。实现我描述的结果的唯一方法是使用多个团队云端硬盘并根据某些事件授予用户访问权限。另一种选择是在项目期间将用户提升为完全权限(从编辑或查看),然后在完成后撤销。
将用户添加到团队云端硬盘
(这也适用于驱动器中的单个文件)
// Using Google Apps Script with v2 of the Drive API enabled
function addToTeamDrive() {
var resource = {
'value': emailString,
'type': 'user',
'role': 'writer'
}
// If you have several Team Drives, loop through and give access
try {
var TeamDrive = Drive.Teamdrives.list();
for(var i = 0; i < TeamDrive.items.length; i++) {
if(TeamDrive.items[i].name === "Team Drive String") {
// This ID may also be a single file inside a Team Drive
var id = TeamDrive.items[i].id;
}
}
// Add user permissions to the matched Drive
Drive.Permissions.insert(resource, id, {"supportsTeamDrives": true});
} catch(e) {
Logger.log(e);
}
}
您可以访问,但即使您拥有完全访问权限,也有很多您无法执行的操作,例如 removeFile()
或 getUrl()
。你仍然会得到
{error: "Exception: Cannot use this operation on a Team Drive item."}
解决方法是在 files/folders 上使用 setTrashed()
而不是 removeFile()
。