节点 JS 谷歌云端硬盘 API 错误:用户的云端硬盘存储空间配额已超出



我想使用NodeJS api将文件上传到Google Drive。我启用了Google Drive api并创建了服务帐户。然后我与此帐户共享一个文件夹。问题是,我看到我使用nodejs上传的文件,但当我使用api上传文件时,可用空间不会改变,所以我无法监控剩余的空间。更重要的是,当我使用api上传大约7 GB时,出现了这个错误(我在谷歌硬盘上有14 GB的空闲空间(:

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

为什么我可以在谷歌硬盘上看到这些文件,但它们不使用我的谷歌硬盘空间?我如何使用谷歌硬盘空间?

上传功能:


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
}
}

问题:

正如你在谷歌硬盘的共享文件夹中看到的那样,存储空间将由上传文件的帐户(即文件的所有者(占用,而不是共享文件夹的所有者:

存储是根据上传文件的人计算的,而不是文件夹的所有者。

因此,如果您尝试使用服务帐户上载文件,该文件将占用服务帐户驱动器中的存储空间。也就是说,当你检查你的普通帐户的驱动器中仍然有14GB的空闲空间时,你看错了地方。

可能的解决方案:

关于:联系您的服务帐户,查看您在该帐户的驱动器中还剩多少空间。您可能会删除一些文件以释放一些存储空间。

如果这是不可能的,我建议向服务帐户授予全域权限,并使用它来模拟您的常规帐户(并代表它上传文件(。

当然,转移文件的所有权会释放服务帐户驱动器中的空间,但由于您无法上传文件,我认为这不是解决这个问题的可行方案。

我遇到了同样的问题,我创建了这个工具来删除我的服务帐户中的一些文件

https://github.com/quangvinh2080/google-drive-cli

  • 设置凭据
export GDRIVE_CLIENT_EMAIL=example@email.com
export GDRIVE_PRIVATE_KEY="service account's private key"
  • 检查配额
google-drive about:get --fields=storageQuota --rawOutput
  • 列表&删除文件&空垃圾:
google-drive files:list
google-drive files:delete --fileId=<fileId>
google-drive files:emptyTrash

相关内容

最新更新