AWS S3 CLI CP文件并添加元数据

Jon*_*son 13 amazon-s3 amazon-web-services aws-cli

尝试将名为test.txt的本地文件复制到我的s3存储桶并将元数据添加到该文件中.

但它总是打印错误:

参数--metadata-directive:无效的选择,有效的选择是:COPY | 更换

是否可以使用cp命令执行此操作,因为我理解应该可以使用的文档. AWS CLI CP DOCS

这是我试过的命令:

aws s3 cp test.txt to s3://a-bucket/test.txt --metadata x-amz-meta-cms-id:34533452

aws s3 cp test.txt to s3://a-bucket/test.txt --metadata-directive COPY --metadata x-amz-meta-cms-id:34533452

aws s3 cp test.txt to s3://a-bucket/test.txt --metadata-directive COPY --metadata '{"x-amz-meta-cms-id":"34533452"}'

aws s3 cp test.txt to s3://a-bucket/test.txt --metadata '{"x-amz-meta-cms-id":"34533452"}'
Run Code Online (Sandbox Code Playgroud)

aws --version: aws-cli/1.9.7 Python/2.7.10 Darwin/16.1.0 botocore/1.3.7

操作系统:macOS Sierra版本10.12.1

编辑

值得一提的是,上传没有--metadata标志的文件可以正常工作.

嗯,我已经检查了我的cli版本的帮助,aws s3 cp help 结果它没有--metadata作为一个选项列出,因为上面给定链接的文档确实如此.

如果runnig旧版本的aws cli

Use aws s3api put-object
Run Code Online (Sandbox Code Playgroud)

如何将文件上传到存储桶并添加元数据:

aws s3api put-object --bucket a-bucket --key test.txt --body test.txt --metadata '{"x-amz-meta-cms-id":"34533452"}'
Run Code Online (Sandbox Code Playgroud)

文档:AWS S3API DOCS

Fré*_*nri 18

实际上,自1.9.10以来已添加对元数据选项的支持

aws s3 在cp,mv和sync中添加了对自定义元数据的支持.

所以升级你的aws cli到这个版本(甚至更好到最新) - 并且metadata值必须是一个地图所以

aws s3 cp test.txt s3://a-bucket/test.txt --metadata '{"x-amz-meta-cms-id":"34533452"}'
Run Code Online (Sandbox Code Playgroud)

  • 我不确定你的密钥名称中是否需要`x-amz-meta -`.这似乎是自动添加的,所以你最终会得到`x-amz-meta-x-amz-meta-cms-id`. (3认同)

小智 6

安装s3cmd工具(免费)并像这样调用:

s3cmd modify --add-header x-amz-meta-foo:bar s3://<bucket>/<object>
Run Code Online (Sandbox Code Playgroud)

通过标头x-amz-meta-foo:bar您将获得该键foo键和值。bar