我正在使用Google Drive API上传文件。 如果我指定子文件夹的ID,它将起作用。但是,当我传递根文件夹的ID时,不会上传文件。 这是我的要求:
states
drive.files.create(
{
auth: this.ggToken,
fields: 'id',
supportsAllDrives: true,
media: {
body: this.convertBufferToStream(file.buffer),
},
requestBody: {
mimeType: file.mimetype,
name: file.originalname,
parents: ['root', '0AASRHiHHtzxrUk9PVA'],
},
},
(e: Error, f: any) => {
if (e) {
console.error(e);
}
console.log(f);
},
);
是根文件夹的ID(我通过使用drive.files.get API来获取它)
那么我的代码有什么问题呢?如何将文件上传到根文件夹?
谢谢。
更新1 这是我的脚本:
0AASRHiHHtzxrUk9PVA
创建服务器帐户密钥后,我从json文件中获得了process.env.GG_DRIVE_CLIENT_EMAIL和process.env.GG_DRIVE_PRIVATE_KEY。
答案 0 :(得分:1)
非常感谢@Tanaike。 这是他的答案:
感谢您答复并添加脚本。我能理解您问题的原因。服务帐户不同于您自己的帐户。因此,Google云端硬盘服务帐户与您的帐户不同。这样,当使用脚本将文件上传到根文件夹时,该文件将上传到服务驱动器帐户的根文件夹。这样,在您的帐户驱动器上看不到该文件。如果要将文件上传到帐户的云端硬盘的根文件夹,请使用OAuth2
使用Oauth2,我可以将文件上传到根文件夹。 这是我的代码:
oauth2Client: OAuth2Client;
constructor() {
this.oauth2Client = new google.auth.OAuth2({
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
redirectUri: 'https://developers.google.com/oauthplayground',
});
this.oauth2Client.setCredentials({
access_token: process.env.ACCESS_TOKEN,
refresh_token: process.env.REFRESH_TOKEN,
});
}
async uploadFiles(file: any) {
const uploadedFile = await drive.files.create({
auth: this.oauth2Client,
fields:
'id, name, mimeType, webViewLink, webContentLink, iconLink, size, originalFilename',
media: {
body: this.convertBufferToStream(file.buffer),
},
requestBody: {
mimeType: file.mimetype,
name: file.originalname,
parents: ['root'],
},
});
return {
driveResource: uploadedFile.data,
};
}