我正在测试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": []
}
答案 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云端硬盘中的文件,我必须授予服务帐户电子邮件地址的权限。正确设置权限后,列表将填充允许服务帐户访问的文件。