CLI 复制后文件元数据未保存在 S3 中

gre*_*reg 4 amazon-s3 amazon-web-services

我在不同地区有两个桶(假设 A 和 B)。我在存储桶 A 中有带有元数据 (x-amz-meta-mymeta) 的档案。我确实使用 CLI 执行复制命令:

aws s3 cp s3://A/${file}.tar.gz s3://B/
Run Code Online (Sandbox Code Playgroud)

根据文件的不同,是否保留元数据。文件pikachu复制后具有相同的元数据,但pika-chu目标存储桶B中的文件不具有元数据。

我已阅读文档,但除了此 SO 答案中公开的信息之外,找不到任何其他信息。

即使目标文件已经存在或不存在,元数据也会丢失。

任何提示?

编辑:即使复制命令是,元数据也会丢失

aws s3 cp s3://A/${file}.tar.gz s3://B/${file}
Run Code Online (Sandbox Code Playgroud)

编辑:有关信息,文件的大小不同,pikachu几 Mb 大而pika-chu更像是 50Mb。

编辑:使用aws s3 cp没有多部分信息的文件上传。

Joh*_*ley 5

这是关于 PUT COPY REST API 的官方文档。

查看 x-amz-metadata-directive。

REST 对象复制

对于 CLI 添加(仅对小于 5 GB 的文件有效并且没有分段复制/上传 - 分段复制不会保留所有标头):

--metadata-directive COPY
Run Code Online (Sandbox Code Playgroud)

--metadata-directive(字符串)指定元数据是从源对象复制还是替换为复制 S3 对象时提供的元数据。请注意,如果对象被部分复制,则源对象的元数据将不会被复制,无论 --metadata-directive 的值如何,而是必须在命令行上将所需的元数据值指定为参数。有效值为 COPY 和 REPLACE。如果未指定此参数,则默认使用 COPY。如果使用 REPLACE,则复制的对象将仅具有 CLI 命令指定的元数据值。请注意,如果您使用以下任何参数:--content-type、content-language、--content-encoding、--content-disposition、--cache-control 或--expires,

[问题后编辑]

AWS CLI 将自动使用分段上传。这是可配置的。此链接显示了 S3 配置选项。

AWS CLI S3 配置