使用gsutil创建上传用签名URL时遭遇404 NotFoundException错误求助
解决GCS可恢复上传签名URL的NotFoundException问题
别担心,你完全不需要提前创建占位对象——可恢复上传的签名URL本来就是用来上传新对象的,不存在的对象是正常情况。这个404错误的根源肯定在别的地方,咱们一步步排查:
检查存储桶是否存在
这个错误很可能是因为目标存储桶本身不存在,而非对象不存在。先运行这条命令验证存储桶的存在性:gsutil ls gs://<存储桶名称>如果返回错误,说明存储桶拼写错误或者还没创建,先把存储桶的问题解决掉。
核对服务账号的IAM权限
你指定的服务邮箱必须拥有创建对象的权限,也就是storage.objects.create权限。可以通过以下命令查看该服务账号的权限:gcloud projects get-iam-policy <你的项目ID> --filter="bindings.members:serviceAccount:<你的服务邮箱>"确保它被分配了
Storage Object Creator角色,或者包含storage.objects.create权限的自定义角色。如果权限不足,给服务账号添加上对应的角色即可。检查路径拼写细节
GCS的存储桶名是区分大小写的(且要求全小写),对象路径的拼写也不能有错误,比如多余的斜杠、拼写错误的文件名。仔细核对gs://<存储桶名称>/<新对象名称>的每一部分,确保和实际存储桶的信息完全匹配。验证命令参数的合理性
几个小细节可以调整试试:- 标准的JPEG MIME类型是
image/jpeg,虽然GCS可能兼容image/jpg,但改成标准值试试; - 暂时去掉
-D调试参数,简化命令,排除调试模式带来的干扰; - 确认参数顺序正确,你的命令结构是对的,但可以尝试去掉
-c参数先生成URL,看是否还会报错。
- 标准的JPEG MIME类型是
如果排查完这些点,应该就能解决这个404问题了。
内容的提问来源于stack exchange,提问作者themantalope
相关产品推荐
相关产品推荐

