You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google服务账号可恢复式上传视频的存储及所有权转移问题

解决Google服务账号Drive存储限制与所有权转移问题

针对你遇到的两个核心问题——服务账号存储配额不足、所有权转移失败,我整理了几个可行的解决方案:

一、突破服务账号的存储限制

Google服务账号默认拥有独立的15GB存储空间,且无法单独升级这个配额,但有两种实用方式绕开这个限制:

  • 关联Google Workspace(原G Suite)账号:如果你的团队使用Workspace,可将服务账号绑定到Workspace域名下。绑定后,服务账号的存储将使用Workspace账号的配额(根据你的Workspace套餐而定)。操作步骤:
    1. 登录Workspace Admin控制台
    2. 进入「IAM与管理员」→「服务账号」
    3. 将你的服务账号添加到域内,并启用域范围委托权限
  • 直接以目标用户身份上传:这是更高效的方案——上传时让服务账号模拟目标用户(需要域范围委托权限),这样文件所有权直接属于目标用户,使用的是目标用户的Drive存储配额,完全绕开服务账号的空间限制。

二、解决所有权转移失败的问题

你遇到的"You can't yet change the owner of this item"报错,本质是服务账号创建的文件默认无法直接转移所有权给普通Google账号(非Workspace域内账号)。即便Workspace账号,也需要额外配置权限。最稳妥的替代方案是:

修改上传逻辑,直接生成归属目标用户的文件

调整你的代码,让服务账号模拟目标用户身份上传,而不是用服务账号自身的身份。修改后的核心代码如下:

from oauth2client.service_account import ServiceAccountCredentials
import requests
import json
import os

# 加载服务账号凭据
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    'creds.json',
    scopes='https://www.googleapis.com/auth/drive'
)
# 关键修改:委托给目标用户的邮箱,而非服务账号自身
delegated_credentials = credentials.create_delegated('target_user@yourdomain.com')
access_token = delegated_credentials.get_access_token().access_token

file_location = "your_video.mp4"
file_name = "uploaded_video.mp4"
folder_id = "your_folder_id"

filesize = os.path.getsize(file_location)

# 初始化可恢复上传会话
headers1 = {"Authorization": "Bearer " + access_token, "Content-Type": "application/json"}
params = { "name": file_name, "mimeType": "video/mp4", "parents": [folder_id] }
r = requests.post(
    "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable",
    headers=headers1,
    data=json.dumps(params)
)
location = r.headers['Location']

# 执行上传
headers2 = {"Content-Range": f"bytes 0-{filesize-1}/{filesize}"}
r = requests.put(location, headers=headers2, data=open(file_location, 'rb'))

这样上传完成后,文件的所有权直接属于target_user@yourdomain.com,无需后续转移操作,同时使用的是该用户的Drive存储空间。

额外注意事项

  • 域范围委托权限需要在Workspace Admin控制台提前开启,且目标用户必须属于同一个Workspace域
  • 如果目标用户是普通Google账号(非Workspace),这种委托方式无法生效,此时建议将服务账号关联到Workspace,或者使用共享权限替代所有权转移(虽然共享不能释放服务账号的空间,但可以让目标用户编辑管理文件)

内容的提问来源于stack exchange,提问作者Anh Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:32:29