NodeJS 使用具有Content Manager访问权限的服务帐户在共享驱动器中创建文件/文件夹

xqnpmsa8  于 2023-11-17  发布在  Node.js
关注(0)|答案(1)|浏览(102)

我可以访问共享的谷歌驱动器(作为内容管理器),我想在该驱动器中创建文件,但当我尝试这样做时,它给了我错误:以下是我的代码和我收到的错误。
我正在使用的范围

`const SCOPES = ['https://www.googleapis.com/auth/drive'];`

// My authorize function:

`async function authorize() {
  const jwtClient = new google.auth.JWT(
    process.env.CLIENT_EMAIL,
    null,
    process.env.PRIVATE_KEY,
    SCOPES
  );
  await jwtClient.authorize();
  return jwtClient;
}
`

字符串
我创建硬盘的方式

`const auth = await authorize();
 const drive = google.drive({ version: 'v3', auth });

 async function createFolderInDrive(drive: any, driveId: string) {
  try {
    const folderMetadata = {
      name: FOLDER_NAME,
      mimeType: 'application/vnd.google-apps.folder',
      parents: [driveId],
    };

    // Create the folder in the shared drive
    const folder = await drive.files.create({
      resource: folderMetadata,
      fields: 'id, name',
    });

    console.log(
      'Folder ${folder.data.name} created with ID: ${folder.data.id}'
    );
  } catch (err) {
    console.error('Error creating folder:', err.message);
  }
}
`


错误我收到:文件未找到:DRIVE_ID.虽然我能够使用drive.drive.list列出驱动器.
我正在使用的上传功能:

`async function uploadFile(drive: any, fileName: string, stream: Readable) {
  try {
    const fileMetaData = {
      name: fileName,
      parents: [process.env.DRIVE_ID],
      mimeType: 'application/pdf',
    };

    const media = {
      mimeType: 'application/pdf',
      body: stream,
    };

    const res = await drive.files.create({
      resource: fileMetaData,
      media: media,
    });
    return res;
  } catch (err) {
    console.log('ERROR:', err.message);
  }
}
`


我收到的错误:'文件未找到:DRIVE_ID。
任何帮助将不胜感激。
我尝试了很多不同的解决方案.有一件事,我认为这可能是问题的作用.我不确定我在该驱动器的作用.我有内容-管理员访问权限,但我看到我必须具有写入或所有者角色。我确定我不是所有者,但不确定我是否是写入者。不确定如何检查我的角色。我通过API检查我的权限,我收到了一个编号中的permissionId。

hgtggwj0

hgtggwj01#

Create a file/folder in a shared drive using the service account who has Content Manager access,我相信你的服务帐户有权限写入共享驱动器。而且,从你的显示脚本,我猜driveId可能是根文件夹或共享驱动器的特定文件夹。在这种情况下,如何进行以下修改?

发件人:

const folder = await drive.files.create({
  resource: folderMetadata,
  fields: 'id, name',
});

字符串
而且,

const res = await drive.files.create({
  resource: fileMetaData,
  media: media,
});

收件人:

const folder = await drive.files.create({
  resource: folderMetadata,
  fields: 'id, name',
  supportsAllDrives: true, // Added
});


而且,

const res = await drive.files.create({
  resource: fileMetaData,
  media: media,
  supportsAllDrives: true, // Added
});

参考:

相关问题