gsutil连接本地storage-testbench执行cp命令报错如何解决
问题根因
gsutil不同子命令的-p参数语义完全不同:
- 对
mb(创建存储桶)子命令而言,-p用于指定操作所属的项目ID,必须后接项目名作为参数值,因此mb -p test gs://bucket-name可以正常执行 - 对
cp(文件复制)子命令而言,-p是不需要传值的开关参数,作用是保留源文件的访问控制列表、时间戳等元数据。cp -p后跟随的test会被gsutil识别为待上传的本地文件路径,本地不存在名为test的文件时,就会抛出CommandException: No URLs matched: test报错。
修复方案
直接删除cp命令中多余的-p test参数即可。存储桶创建完成后,桶内的对象上传、下载等操作不需要额外指定项目ID,会自动归属到存储桶所属的项目下。
单文件上传的正确命令:
gsutil \ -o "Credentials:gs_json_host=127.0.0.1" \ -o "Credentials:gs_json_port=9000" \ -o "Boto:https_validate_certificates=False" \ cp -p my-file.ext gs://bucket-name/my-file.ext
如果需要批量上传3个本地文件,直接将所有待上传文件的本地路径依次列在目标存储桶路径前即可:
gsutil \ -o "Credentials:gs_json_host=127.0.0.1" \ -o "Credentials:gs_json_port=9000" \ -o "Boto:https_validate_certificates=False" \ cp -p file1.ext file2.ext file3.ext gs://bucket-name/
补充说明
storage-testbench文档中出现的test是项目ID的占位示例,仅适用于创建存储桶这类项目级操作,文件上传类对象操作不需要传入该参数。
后端日志显示第一个GET请求返回200属于正常现象:该请求是gsutil启动时校验服务连通性、拉取服务根配置的常规请求,报错发生在gsutil本地参数解析阶段,此时还未发起文件上传相关的请求,和服务端逻辑无关。
内容的提问来源于stack exchange,提问作者Alexis Wilke
相关产品推荐
相关产品推荐

