如何使用 gapi 批处理请求创建权限时修复"Sorry, an item is restricted in sharing."



我正在使用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个左右后达到费率限制。发生这种情况时,您需要进行油门和重试。同样,如果您发送单独的请求,这要容易得多。

相关内容

  • 没有找到相关文章

最新更新