如何添加或修改 Amazon S3 中现有对象的内容处置?

2024-01-09

我们的 AWS S3 存储桶中有数百个没有设置内容处置的对象。

我正在使用 Ruby aws-sdk gem。

如何添加或更改这些对象的内容配置,而无需再次重新上传文件?

我努力了

obj.write(:content_disposition => 'attachment')
obj.copy_from(obj.key, :content_disposition => 'attachment')

还有 copy_to()、move_to(),但这些似乎都无法将内容配置添加到对象中。在少数情况下,对象似乎根本没有被修改(修改时间没有改变),在其他情况下,对象文件已损坏!


我知道使用 :response_content_disposition 的替代方案 当通过 HTTP 请求 s3 对象时,设置 Content-Disposition 标头,

obj.url_for(:read, :response_content_disposition => "attachment")

谢谢你!


我们通过更改aws-sdk源代码找到了解决方案。

在 s3/s3_object.rb 中

将以下行添加到 copy_from() (类似于 :content_type 的处理方式)

if options[:content_disposition]
    copy_opts[:content_disposition] = options[:content_disposition]
    copy_opts[:metadata_directive] = "REPLACE"
end

另外,在 s3/client.rb 中

添加下面标记的行

object_method(:copy_object, :put,
                    :header_options => {
                    :copy_source => 'x-amz-copy-source',
                    :cache_control => 'Cache-Control',
                    :metadata_directive => 'x-amz-metadata-directive',
                    :storage_class => 'x-amz-storage-class',
                    :server_side_encryption => 'x-amz-server-side-encryption',
                    :content_type => 'Content-Type',
                    :content_disposition => 'Content-Disposition', # add this line here
                }) do

完成上述操作后,您可以执行以下操作将内容配置添加到现有对象:

obj.copy_from(obj.key, :content_disposition => 'attachment', :content_type => 'image/png', :acl => :public_read)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何添加或修改 Amazon S3 中现有对象的内容处置? 的相关文章

随机推荐