我在不同地区有两个桶(比方说A和B)。我在存储桶A中存档了元数据(x-amz-meta-mymeta)。我使用CLI执行复制命令:
aws s3 cp s3://A/${file}.tar.gz s3://B/
根据文件,是否保留元数据。文件pikachu
在复制后具有相同的元数据,但文件pika-chu
在目标存储桶B中没有元数据。
我已阅读该文档,但找不到除this SO answer中公开的信息之外的任何其他信息。
即使目标文件已存在,元数据也会丢失。
有关于此的任何提示吗?
编辑:即使复制命令为
,元数据也会丢失aws s3 cp s3://A/${file}.tar.gz s3://B/${file}
修改:有关信息,文件大小不同,pikachu
只有几个Mb大,而pika-chu
更像是50Mb。
修改:使用aws s3 cp
上传文件,但不包含多部分信息。
答案 0 :(得分:2)
以下是PUT COPY REST API的官方文档。
查看x-amz-metadata-directive。
对于CLI添加(仅对小于5 GB的文件有效且没有多部分复制/上传 - 多部分副本不保留所有标题):
--metadata-directive COPY
- metadata-directive(string)指定是从源对象复制元数据还是用复制时提供的元数据替换元数据 S3对象。请注意,如果将对象复制到部分中,则 无论值如何,都不会复制源对象的元数据 对于--metadata-directive,而不是所需的元数据值 在命令行中指定为参数。有效值为COPY 和REPLACE。如果未指定此参数,则将使用COPY 默认。如果使用REPLACE,则复制的对象将只有 CLI命令指定的元数据值。请注意,如果 您正在使用以下任何参数: - content-type, 内容语言, - 内容编码, - 内容 - 处置, --cache-control或--expires,如果希望复制的对象具有指定的元数据值,则需要为非多部分副本指定--metadata-directive REPLACE。
[问题后编辑]
AWS CLI将自动使用分段上传。这是可配置的。此链接显示S3配置选项。
答案 1 :(得分:0)
大于5 GB的文件在复制时会丢失其元数据,请参阅https://github.com/aws/aws-sdk-java/issues/367