2012-06-21 59 views
0

我們擁有數百個AWS S3存儲桶中沒有內容處置集的對象。如何在Amazon 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") 

謝謝!

回答

1

我們通過更改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) 
相關問題