Как сделать все файлы доступными в одной папке Google Drive? - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь получить доступ к мультимедийным файлам в папке, созданной моим веб-приложением, используя официальную библиотеку API Google для node.js (https://github.com/googleapis/google-api-nodejs-client/).

При успешном завершении oauth я создаю папку MyAppFolder и папку media внутри нее.

Идея состоит в том, что пользователи будут заполнять эту папку media любыми фотографиями и видео, которые они хотят, тогда мое веб-приложение возьмет их и отобразит на странице, чтобы пользователь мог получить общее представление о своих медиафайлах. Я могу получить все медиа-файлы в папке media. Вот мой фрагмент кода:

async function getGoogleDriveMedia({ user, credentials }) {
  // await prepareDrive({ user, credentials });
  const rootFolder = await getRootFolder({ user, credentials });

  if (!rootFolder) {
    return;
  }

  const client = await createOauthClient({ user, credentials });
  const drive = google.drive({
    version: 'v3',
    auth: client,
  });
  const mediaFolderRes = await drive.files.list({
    q: `mimeType='application/vnd.google-apps.folder' and name='media' and '${
      rootFolder.id
    }' in parents`,
    fields: 'nextPageToken, files(id, name, parents)',
  });

  const mediaFolder = _.get(mediaFolderRes, 'data.files[0]');
  if (!mediaFolder) {
    return;
  }

  const mediaRes = await drive.files.list({
    q: `'${
      mediaFolder.id
    }' in parents and (mimeType contains 'image/' or mimeType contains 'video/')`,
    fields:
      'nextPageToken, files(' +
      [
        'id',
        'name',
        'webContentLink',
        'webViewLink',
      ].join(', ') +
      ')',
  });

  return _.get(mediaRes, 'data.files');
}

Проблема в том, что я не могу отображать эти медиа, потому что они не доступны для общественности. Можно ли сделать MyAppFolder и все в нем доступным для общественности с помощью одного обновления прав доступа? Или мне нужно сделать это для каждого файла?

Я также проверил параметр fields.files в их проводнике API: https://developers.google.com/apis-explorer/#search/drive.files.list/m/drive/v3/drive.files.list

Нет ничего похожего на .previewLink или какое-либо другое поле URL изображения.

Как я могу показать эти изображения в моем веб-приложении?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Посмотрите на file.thumbnailLink. У вас может быть достаточно разрешения для ваших целей, и это публично. NB imho, тот факт, что он общедоступен, является ошибкой безопасности, которая может быть исправлена ​​в будущем.

Примечание: в вашем коде есть ошибка. Вы получаете nextPageToken правильно, но затем не используете его для проверки, есть ли в списке файлов больше страниц, которые вам нужно получить.

0 голосов
/ 13 января 2019

Можно ли сделать MyAppFolder и все, что в нем, доступным для общественности с помощью одного обновления разрешений? Или мне нужно сделать это для каждого файла?

Нет, нет способа обновить все в файле сразу. Вам придется обновить каждый файл. Даже обновление папки не приведет к изменению настроек для файлов в папке.

Просто попросите ваше приложение изменить разрешения для файла после его загрузки. А пока запустите все существующие файлы и поменяйте их разрешения.

Примечание. Надеюсь, вы сообщили своим пользователям, что их файлы будут опубликованы.

...