我需要修改S3上成百上千个对象的元数据(Content-Type)。使用ruby有什么好方法呢?据我所知,使用fog.io无法只保存元数据,整个对象必须重新保存。似乎使用the official sdk library需要我为这一个任务滚动 Package 器环境。
我需要修改S3上成百上千个对象的元数据(Content-Type)。使用ruby有什么好方法呢?据我所知,使用fog.io无法只保存元数据,整个对象必须重新保存。似乎使用the official sdk library需要我为这一个任务滚动 Package 器环境。
6条答案
按热度按时间x7rlezfr1#
你说得对,官方SDK允许你修改对象元数据而无需再次上传。它所做的是复制对象,但对象在服务器上,所以你不需要下载文件并重新上传。
Package 器很容易实现,类似于
njthzxwz2#
在v2 API中,您可以使用
Object#copy_from()
或Object.copy_to()
以及:metadata
和:metadata_directive => 'REPLACE'
选项来更新对象的元数据,而无需从S3下载。Joost's gist中的代码抛出此错误:
Aws::S3::错误::无效请求:此复制请求是非法的,因为它试图将对象复制到自身,而不更改对象的元数据、存储类、网站重定向位置或加密属性。
这是因为默认情况下AWS会忽略复制操作提供的
:metadata
,因为它复制元数据,如果我们想就地更新元数据,我们必须设置:metadata_directive => 'REPLACE'
选项。请参见www.example.comhttp://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#copy_from-instance_method
下面是我最近用来执行元数据更新操作的一个完整的代码片段:
为便于重复使用:
cczfrluj3#
对于未来的读者,这里有一个使用Ruby aws-sdk v1修改内容的完整示例(另请参见Gist中的aws-sdk v2示例):
ui7jx7zq4#
经过一番搜索,这似乎对我有效
8wtpewkr5#
使用sdk来改变内容类型将导致
x-amz-meta-
前缀。我的解决方案是使用ruby + aws cli。这将直接写入content-type
而不是x-amz-meta-content-type
。ltskdhd16#
此API现在似乎可用: