如何在一个Google云端硬盘文件夹中访问所有文件?

时间:2019-01-13 07:08:49

标签: node.js google-apps-script google-api google-oauth google-api-client

我正尝试使用node.js(https://github.com/googleapis/google-api-nodejs-client/)的官方Google api库访问由我的Web应用程序创建的文件夹中的媒体文件。

成功执行oauth时,我将创建一个文件夹MyAppFolder,并在其中创建一个media文件夹。

这个想法是,用户将用他们想要的任何照片和视频填充此media文件夹,然后我的Webapp会将其带入并显示在页面上,以供用户获得其媒体的汇总视图。我可以在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及其内部的所有内容对公众开放?还是我需要针对每个文件执行此操作?

我还检查了其API资源管理器上的fields.files参数:https://developers.google.com/apis-explorer/#search/drive.files.list/m/drive/v3/drive.files.list

没有类似.previewLink或其他图片网址字段的内容。

如何在我的Web应用程序上显示这些图像?

2 个答案:

答案 0 :(得分:1)

看看file.thumbnailLink。它可能具有满足您目的的足够分辨率,并且是公开的。 NB恕我直言,它是公开的事实是一个安全漏洞,将来可能会修复。

注意,您的代码中存在错误。您正确地获取了nextPageToken,但是没有使用它来测试文件列表中是否还有更多页面需要获取。

答案 1 :(得分:0)

  

是否可以通过单个权限更新使MyAppFolder及其中的所有内容对公众开放?还是我需要针对每个文件执行此操作?

否,无法一次更新文件中的所有内容。您将必须更新每个文件。即使更新文件夹也不会更改文件夹中用于文件的设置。

在文件上传后,让您的应用程序更改文件的权限。同时,运行所有现有文件并更改其权限。

注意:我希望您已通知用户其文件将公开。