访问Google Drive API返回空文件列表

时间:2012-10-02 20:32:57

标签: google-drive-api

我正在测试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 个答案:

答案 0 :(得分:5)

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

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

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

您可以找到有关可用范围here的信息。使用它为您的应用选择合适的范围。

答案 1 :(得分:2)

足以将https://www.googleapis.com/auth/drive.readonly.metadata范围包含在列表文件中

答案 2 :(得分:2)

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

例如,我的个人 Google Drive 中有一个 Google Slide 文件,我希望 Google Drive API 可以读取它,我必须与 json 服务中列出的 xxx@xxx.iam.gserviceaccount.com 共享此 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'
    },
  ]
}

答案 3 :(得分:1)

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