Как исправить: «Извините, раздел запрещен для совместного использования». при использовании пакетных запросов gapi для создания разрешения - PullRequest
0 голосов
/ 05 мая 2019

Я использую JavaScript Клиентская библиотека Google API для работы с Google Drive API. Я настроил пакетный запрос для создания разрешений для ряда файлов на Google Диске. Каждое изменение предназначено для добавления пользователя в качестве средства просмотра / чтения файла.

Мне удалось правильно обмениваться файлами, вызывая API напрямую для каждого файла, однако даже для 4 или 5 файлов вызывать API каждый раз довольно медленно. Я успешно создал пакетные запросы для других функций, таких как перечисление назначений Google Classroom и копирование файлов Google Диска (после их совместного использования вручную).

Это будет работать:

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"

Я знаю, что этими файлами можно поделиться, потому что я могу поделиться ими через интерфейс Drive или с помощью метода gapi.client.drive.permissions.create, поэтому я уверен, что ничто в домене не ограничивает общий доступ. Я также пытался сделать это с разных учетных записей в разных доменах.

Я действительно изо всех сил пытаюсь понять ошибку. Я пытался воссоздать его с помощью API Explorer, но не смог этого добиться.

Благодарен за любые предложения!

1 Ответ

0 голосов
/ 06 мая 2019

Не используйте пакет. Это не то, что ты думаешь.

Вы можете увеличить свою пропускную способность, просто отправив несколько запросов параллельно, и используйте Promise.all, чтобы узнать, когда они будут выполнены. Это упростит обработку ошибок / повторных попыток, поскольку вам не нужно анализировать пакетный ответ.

Используя несколько одновременных постов или пакет постов, вы достигнете предела скорости после отправки 30 или около того. Когда это произойдет, вам нужно будет дросселировать и повторить попытку. Опять же, это гораздо проще сделать, если вы отправляете отдельные запросы.

...