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,但由于您无法上传文件,我认为这不是一个可行的解决方案问题。
我想使用 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,但由于您无法上传文件,我认为这不是一个可行的解决方案问题。