Google Drive API:无法使用Node.js将文件上传到根文件夹

时间:2019-10-10 23:53:49

标签: node.js google-api-nodejs-client

我正在使用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。

1 个答案:

答案 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,
    };
  }