10

我正在测试 Google Drive API。测试脚本执行 HTTP GET 来访问 Files->List API,但不知何故,我总是在项目中得到一个空列表。我的谷歌驱动器中有数百个文件,所以结果出乎意料。HTTP 响应如下所示。

    {
     "kind": "drive#fileList",
     "etag": "\"VEU5fga3uYlZRf0pG-N1kS4iWP4/Kxo5eGvPKynWfroe9v5L5T43-n0\"",
     "selfLink": "https://www.googleapis.com/drive/v2/files?maxResults=5",
     "items": []
    }
4

4 回答 4

12

要允许服务帐户访问我自己的 Google Drive 中的文件,我必须授予服务帐户的电子邮件地址权限。正确设置权限后,列表中将填充允许服务帐户访问的文件。

于 2012-10-03T15:40:12.630 回答
5

这通常意味着您已使用不允许您查看这些文件的范围进行身份验证。

例如,范围https://www.googleapis.com/auth/drive.file仅提供对应用程序创建或打开的文件的访问。您将无法访问在 Google Drive 界面或其他应用程序中创建的文件。

如果要访问所有文件,则必须使用另一个范围。https://www.googleapis.com/auth/drive例如,为您提供访问所有用户文件的完整、许可范围

您可以在此处找到有关可用范围的信息。使用它为您的应用选择正确的范围。

于 2015-02-27T16:13:03.593 回答
4

谷歌在他们的文档中没有明确说明。经过半天的尝试修改所有可能有帮助的内容后,我发现您需要与您的服务帐户 json 文件中描述的电子邮件共享该文件。

例如,我的个人 Google Drive 中有一个 Google Slide 文件,我希望它可以被 Google Drive API 读取,我必须与xxx@xxx.iam.gserviceaccount.comjson 服务帐户文件中列出的共享这个 Slide 文件。

然后下面的代码片段应该返回共享的幻灯片文件:

import {google} from 'googleapis'
const credentials = require("./credentials.json");

async function main() {
    const scopes = [
        'https://www.googleapis.com/auth/drive',
        'https://www.googleapis.com/auth/presentations',
    ]

    const auth = new google.auth.JWT(
        credentials.client_email,
        null,
        credentials.private_key,
        scopes,
    )


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

    const res = await drive.files.list()
    console.log(res.data)

}

main()

{
  kind: 'drive#fileList',
  incompleteSearch: false,
  files: [
    {
      kind: 'drive#file',
      id: 'xxxxx',
      name: 'xxxxx',
      mimeType: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
    },
  ]
}

于 2021-07-11T11:54:28.607 回答
1

https://www.googleapis.com/auth/drive.readonly.metadata包含范围以列出文件就足够了

于 2013-03-28T18:00:18.907 回答