目标: 列出组织机构云端硬盘中的所有文件夹以及有权访问每个文件夹的所有人员。
我是通过启用了高级云端硬盘服务的Apps脚本来完成此操作的。
function listFolders() {
var query = 'mimeType = "application/vnd.google-apps.folder" and trashed = false'
var response = Drive.Files.list({corpora: 'domain', q : query});
if (response.items && response.items.length > 0) {
var foldersDetails = getFoldersDetails(response.items);
}
Logger.log(foldersDetails);
}
function getFoldersDetails(items) {
var foldersArr = [];
for (var i = 0; i < items.length; i++) {
var folderDetails = getFolderDetails(items[i].id);
foldersArr.push(folderDetails);
}
return foldersArr;
}
function getFolderDetails(fileId) {
var file = Drive.Files.get(fileId);
return {name: file.title,
permissions: file.permissions}
}
问题是我只是获取null而不是权限对象。
Drive API文档:https://developers.google.com/drive/api/v2/reference/files
我在做什么错了?
答案 0 :(得分:1)
这是由于partial response而引起的。
文件列表将仅返回ID和名称,如果我记得的话,我认为文档很旧且无效。另一方面,您可以添加add.fields参数并使用*,它将返回您现在看到的所有参数,返回为空
我不是JavaScript或应用脚本开发人员。该代码应类似于以下内容,仅适用于文件get。我似乎找不到它的一个示例,只有一个使用files.list的示例,该示例不适用于V3。
function listFiles() {
var files = Drive.Files.list({
fields: 'nextPageToken, items(id, title)',
maxResults: 10
}).items;
for (var i = 0; i < files.length; i++) {
var file = files[i];
Logger.log('%s (%s)', file.title, file.id);
}
}
如果要查看所有内容,请使用*
var files = Drive.Files.list({
fields: '*',
maxResults: 10
}).items;
答案 1 :(得分:0)
如DaImTo所建议,在我的代码中添加field ='*'可以解决问题:
function getFolderDetails(fileId) {
var file = Drive.Files.get(fileId, {fields:'*'});
return {name: file.title,
permissions: file.permissions}
}