Node JS Google Drive api error: The user's Drive storage quota has been exceeded

Node JS Google Drive api error: The user's Drive storage quota has been exceeded

我想使用 Node JS api 将文件上传到 Google 驱动器。我已启用 Google Drive api 并创建了服务帐户。然后我与这个帐户共享一个文件夹。问题是我看到我使用 node js 上传的文件,但是当我使用 api 上传文件时,免费 space 没有改变,所以我无法监控还剩多少 space .更重要的是,当我使用 api 上传大约 7 GB 时出现此错误(我在 Google 驱动器上有 14 GB 可用空间):

code: 403,
  errors: [
    {
      domain: 'global',
      reason: 'storageQuotaExceeded',
      message: "The user's Drive storage quota has been exceeded."
    }
  ]

为什么我可以在 Google 驱动器上看到这些文件,但它们不使用我的 Google 驱动器 space?我怎样才能打开它以使用我的 Google 驱动器 space?

上传功能:


const { google } = require('googleapis');
const path = require('path');
const fs = require('fs');

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

const KETFILEPATH = "key.json"


let main_dir_id = "1oT2Fxi1L6iHl9pDNGyqwBDyUHyHUmCJJ"


const auth = new google.auth.GoogleAuth({
    keyFile: KETFILEPATH,
    scopes: SCOPES
})
let createAndUploadFile = async (auth, file_path, mimeType, folder_id, i = 0) => {
    const driveService = google.drive({ version: 'v3', auth })

    let fileMetaData = {
        'name': file_path.slice(file_path.lastIndexOf("/") + 1),
        'parents': [folder_id]
    }
    let media = {
        mimeType: mimeType,
        body: fs.createReadStream(file_path)
    }
    let res = await driveService.files.create({
        resource: fileMetaData,
        media: media,
    })
    if (res.status === 200) {
        console.log('Created file id: ', res.data.id)
        return res.data.id
    } else {
        // this error is in res
        return 0
    }
}

问题:

正如您在Share folders in Google Drive看到的,存储space将被上传文件的帐户(即文件的所有者)占用,而不是共享的所有者文件夹:

Storage is counted against the person who uploaded the file, not the owner of the folder.

因此,如果您尝试使用服务帐户上传文件,文件将占用服务帐户的云端硬盘中的存储空间 space。也就是说,当您检查您的常规帐户的 Drive 中还有 14 GB 可用空间时,您看错了地方。

可能的解决方案:

调用 About: get with your service account to check how much space you have left in that account's Drive. Chances are you can delete 一些文件以释放一些存储空间 space。

如果这不可能,我建议将 domain-wide authority 授予服务帐户并使用它来模拟您的常规帐户(并代表它上传文件)。

当然,transfering ownership 的文件会在服务帐户的云端硬盘中释放 space,但由于您无法上传文件,我认为这不是一个可行的解决方案问题。