我正在使用JavaScript Google API客户端库与Google Drive API合作。我已经设置了一个批处理请求,以在Google Drive中的许多文件上创建权限。每个更改旨在添加用户作为文件的查看器/读者。
我设法通过直接调用每个文件的API来正确共享文件,但是即使对于4或5个文件,每次调用API也很慢。我已经成功地创建了其他功能的批处理请求,例如列出Google教室分配并复制Google Drive文件(手动共享它们之后(。
这将有效:
var permissionParams = {
"role": "reader",
"type": "user",
"emailAddress": emailToShareTo
};
for (f = 0; f < files.length; f++) {
var fileID = 'XXXXXXXXXXXXXXXXXXX'
var permissionParams = {
"role": "reader",
"type": "user",
"emailAddress": emailToShareTo
};
await gapi.client.drive.permissions.create(
{
"fileId": fileId,
"resource": permissionParams
});
}
但是,我试图做与批处理的一部分相同的事情:
function permissionRequest(fileId,params) {
return gapi.client.request({
'path': 'drive/v3/files/' + fileId + '/permissions?supportsAllDrives=true&sendNotificationEmail=false',
'body': params,
'method': 'POST'
});
}
function doSharing() {
var shareBatch = gapi.client.newBatch();
var permissionParams = {
"role": "reader",
"type": "user",
"emailAddress": secondaryEmail
};
for (f = 0; f < files.length; f++) {
var fileId = files[f].id;
var filePermissionRequest = permissionRequest(fileId,permissionParams)
shareBatch.add(filePermissionRequest, {'id': fileId + '-share'});
}
await shareBatch.then(async function(response){
console.log(response);
});
}
我收到的错误是:
domain: "global"
message: "Bad Request. User message: "Sorry, an item is restricted in sharing.""
reason: "invalidSharingRequest"
我知道可以共享文件,因为我可以通过驱动器UI或使用gapi.client.drive.permissions.create
方法共享文件,因此我相信限制共享的域上没有任何域中的任何内容。我还尝试过它来自不同域上不同帐户的/
我真的很难理解错误。我试图使用API资源管理器重新创建它,但无法实现。
感谢任何建议!
不要使用批处理。这不是您的想法。
您可以通过并行发送多个请求,然后使用Promise。所有人都知道他们何时在乎。这将简化您的错误/重试处理,因为您不必解析批处理响应。
使用多个并发帖子或一批帖子,您将在发送30个左右后达到费率限制。发生这种情况时,您需要进行油门和重试。同样,如果您发送单独的请求,这要容易得多。