调用UploadObjectAsync上传BLOB时抛出Google.Apis 404 Not Found错误的原因
UploadObjectAsync调用返回404异常的专业解释与排查指引 异常本质
- 堆栈定位的触发点在
UploadHelper.CheckFinalProgress()环节,说明异常并非来自上传请求本身的响应,而是上传流程完成后,SDK执行最终状态校验时的请求被返回404 - 空字节数组上传可复现完全一致的异常,可排除文件内容、大小对异常触发的影响
常见根因匹配
- 传入的存储桶参数不符合要求。
UploadObjectAsync要求第一个参数传入纯存储桶全局唯一标识,若字符串值中混入gs://前缀、前后空格、大小写不匹配,或对应云项目下从未创建该名称的存储桶,会导致SDK拼接的资源访问路径不存在,触发404。这是当前场景下占比最高的触发原因。 - 3.2.0版本SDK存在已知逻辑缺陷。该版本在处理单段直传场景时,最终状态校验的资源路径拼接存在bug:当上传对象内容长度为0时,SDK会错误构造不存在的对象元数据请求地址,跳过正常的上传响应解析,直接抛出404异常。这一缺陷可直接解释空字节数组测试复现异常的现象——哪怕上传操作本身已经执行成功。
- 鉴权权限范围配置不全。如果调用使用的身份凭证仅配置了对象写入权限,缺失目标存储桶的元数据读取权限,Cloud Storage API在收到元数据校验请求时,不会返回403权限不足错误,而是直接返回404 Not Found,伪装成资源不存在的响应,这也是开发人员查阅状态码说明文档时,未找到匹配场景排查指引的核心原因。
快速验证方法
- 直接打印调用时传入的
bucket参数原始字符串,逐字符和云控制台中展示的存储桶名称做比对,剔除多余的非标准字符、路径前缀 - 同身份、同参数下调用同版本SDK的
GetBucketAsync()方法,若该调用同样返回404,即可直接定位是存储桶名称不匹配或权限范围缺失问题 - 临时升级SDK到3.4.0及以上版本,重新测试空字节数组上传流程,若异常消失即可确认是3.2.0版本的内置逻辑bug
内容的提问来源于stack exchange,提问作者derekbaker783
相关产品推荐
相关产品推荐

