Есть ли способ указать целевой диск при копировании файла на общий диск Google с помощью google drive-drive-api-v3 и node js - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь загрузить google do c на общий диск с помощью Drive API v3 через nodejs. Пользователь, выполняющий загрузку, имеет права на запись и редактирование для папки, в которую нужно скопировать файл, и все настройки OAuth были установлены и т. Д. c ... Однако я получаю следующую ошибку:

   domain: 'global',
   reason: 'notFound',
   message: 'File not found: 1BPRlu4tWhsjsRp8tjQKL59o5apWkPa0k.',
   locationType: 'parameter',
   location: 'fileId' } ] }

Есть ли способ указать целевой диск конкретно?

function listFiles(auth) {
  const drive = google.drive({version: 'v3', auth});
  drive.files.list({
    q: "mimeType = 'application/msword'",
    pageSize: 100,
    fields: 'nextPageToken, files(id, name)',
  }, (err, res) => {
    if (err) return console.log('The API returned an error: ' + err);
    const files = res.data.files;
    if (files.length) {
      console.log('Files:');
      files.map((file) => {
        console.log(`${file.name} (${file.id})`);
        drive.files.copy({
          fileId: file.id,
          'name' : 'Updated File Name',
          'mimeType' : 'application/vnd.google-apps.document'
          'parents': ['1BPRlu4tWhsjsRp8tjQKL59o5apWkPa0k']
        })
      });
    } else {
      console.log('No files found.');
    }
  });
}

Ответы [ 2 ]

1 голос
/ 26 марта 2020

В соответствии со стандартами v3 лучше использовать элемент ресурса для хранения параметров тела запроса. Используя флаг SupportAllDrives, вы можете указать, как настроить таргетинг как на личные, так и на общие диски. Таким образом, вы также сможете использовать идентификаторы папок на вашем общем диске. Теперь параметр по умолчанию имеет значение false, имейте в виду, что Этот параметр будет действовать только до 1 июня 2020 года. После этого предполагается, что все приложения поддерживают общие диски.

let resource = {
  'name' : 'Updated File Name',
  parents: ['1BPRlu4tWhsjsRp8tjQKL59o5apWkPa0k']
}
drive.files.copy({
    fileId: file.id,
    supportsAllDrives: true,
    resource: resource
});

Ссылки:

Файлы копируют документы

0 голосов
/ 27 марта 2020

Спасибо, Алессандро.

Чтобы на самом деле это заработало, мне нужно было добавить немало дополнительных параметров, включая driveId, corpora, includeItemsFromAllDrives и supportAllDrives. Примечание: supportAllDrives скоро будет объявлено устаревшим (июнь 2020 г.).

В итоге все выглядело примерно так ...

function listFiles(auth) {

  const drive = google.drive({version: 'v3', auth});

  let resource = {
    name: 'Copied File Shared to Shared',
    parents: ['xxxxxxxxxxxxxxxxxxxxxxxxxxxx']. //folder to upload to on Shared Drive
  }

  drive.files.copy({
    fileId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //file to be copied
    driveId: 'xxxxxxxxxxxxxxxxx',
    includeItemsFromAllDrives: true,
    corpora: 'drive',
    supportsAllDrives: true,
    resource: resource
  }, (err, res) => {
    if (err) return console.log('The API returned an error: ' + err);
    const files = res.data.files;
    console.log("Success!!!")
  });
}
...