Google Cloud Storage上传异常:参数'total_size'错误及文件未上传问题
合同访谈转写工具GCS上传问题排查与修复
1. 解决total_size参数报错问题
新版google-resumable-media库已移除ResumableUpload类初始化参数中的total_size,改用content_length传递文件大小,或通过文件流自动获取。如果你的代码手动传入了total_size,直接替换即可:
原错误代码示例:
from google.resumable_media.requests import ResumableUpload upload = ResumableUpload( upload_url, total_size=file_size, # 新版不支持该参数 chunksize=1024*1024 )
修改为:
upload = ResumableUpload( upload_url, content_length=file_size, # 替换为content_length chunksize=1024*1024 )
更推荐直接使用google-cloud-storage官方客户端方法上传,避免底层库的参数兼容问题:
from google.cloud import storage client = storage.Client() bucket = client.get_bucket("你的存储桶名称") blob = bucket.blob("目标路径/文件名.wav") # 从本地文件上传 blob.upload_from_filename("本地文件路径.wav") # 或从文件流上传 with open("本地文件路径.wav", "rb") as f: blob.upload_from_file(f)
2. 无报错但文件未上传的排查步骤
(1)验证权限与授权
- 确认服务账号拥有
storage.objects.create权限,IAM角色至少为Storage Object Creator。 - 检查环境变量
GOOGLE_APPLICATION_CREDENTIALS是否指向正确的密钥文件,或代码中是否显式加载密钥:
client = storage.Client.from_service_account_json("服务账号密钥路径.json")
(2)检查代码执行逻辑
- 确认上传代码块未被条件分支跳过,比如是否存在未触发的
if判断。 - 若手动使用断点续传,需确保调用
next_chunk()完成整个上传流程:
with open("本地文件路径.wav", "rb") as f: upload.initiate( content_type="audio/wav", stream=f ) response = None while response is None: response = upload.next_chunk()
(3)排查日志与请求细节
- 开启调试日志查看上传请求的完整响应:
import logging logging.basicConfig(level=logging.DEBUG)
- 检查存储桶日志(若已开启),确认是否有上传请求到达,是否存在隐藏错误(如路径非法、存储空间不足等)。
(4)验证存储桶与路径配置
- 确认存储桶名称拼写正确,且未处于归档状态(归档存储需恢复后才能上传)。
- 检查目标文件路径是否包含特殊字符(如空格、中文),如有需改用英文路径或进行URL编码。
3. 维持依赖版本兼容性
在requirements.txt中指定兼容的版本范围,避免自动安装不兼容版本:
google-cloud-storage>=2.0.0,<3.0.0 google-resumable-media>=2.0.0,<3.0.0
内容的提问来源于stack exchange,提问作者9scorp4
相关产品推荐
相关产品推荐

