我在使用服务帐户密钥和使用drive.files.list API进行编码时遇到了问题,虽然我已公开共享所有文件,但我无法获取文件
const { google } = require('googleapis');
const drive = google.drive('v3');
const jwtClient = new google.auth.JWT(
client_email,
null,
private_key,
['https://www.googleapis.com/auth/drive']
);
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
} else {
console.log("Successfully connected!");
}
});
// List Drive files.
drive.files.list({
auth: jwtClient,
// fields: "files",
includeRemoved: false,
spaces: 'drive'
}, (listErr, resp) => {
if (listErr) {
console.log(listErr);
return;
}
console.log("Result ========>", resp.data.files)
});
请帮我解决这个问题。 谢谢:))
答案 0 :(得分:0)
服务帐户不是您是虚拟用户。与任何用户一样,files.list只返回它有权访问的文件。这是它创建的文件和某人与之共享的文件。虽然人们会认为每个人都可以访问公共文件。如果files.list返回了Google驱动器上设置为public的所有文件的列表,这些文件将是一个巨大的列表并且不是很有用。
如果您拥有文件ID,则可以将文件设置为public,您可以使用API密钥查看该文件。你无法编辑它,但你可以在它上面做一个文件。
获取服务帐户的电子邮件地址,然后转到google驱动器,与其他任何用户一样,共享包含服务帐户文件的文件夹。如果您愿意,还可以使用服务帐户单独共享每个文件。 然后尝试做一个files.list。
答案 1 :(得分:0)
与服务帐户电子邮件共享域范围的共享文件夹对我不起作用。
但是,我确实找到了这篇文章
(https://nilsnh.no/2018/12/17/how-to-implement-domain-wide-delegation-in-gsuite-using-node.js)
这解释了您可以将“要模拟的电子邮件地址”传递给 google.auth.JWT 调用的主题参数。现在就好像您以该用户身份登录一样。您可能应该为此目的创建一个特定的域用户。这个专用用户不会有任何个人驱动器文件,但它允许您访问域范围的共享驱动器,而无需使用该用户的密码。
div {
opacity: 0;
transform: translateY(20vh);
visibility: hidden;
transition: opacity 0.6s ease-out, transform 1.2s ease-out;
will-change: opacity, visibility;
}
div.inview {
opacity: 1;
transform: none;
visibility: visible;
}
section {
width: 100%;
height: 100%;
overflow: auto;
background: black;
color: yellow;
}
html,
body {
height: 100%;
padding: 0;
margin: 0;
}