在S3上使用Fog设置Content_Type而不覆盖其他元数据

时间:2014-02-14 20:02:23

标签: ruby-on-rails amazon-web-services amazon-s3 fog

我正在尝试使用副本重置存储桶中所有mp3的content_type(如Set content_type of Fog storage files on s3中所述)。

但是,这会覆盖项目的任何现有值,尤其是storage_class和owner值。这些值对于存储桶中的所有文件都是相同的,因此我尝试将它们设置为选项。但是,当我在复制完成后查询文件的所有者时,我得到nil。

connection.directories.get('my_bucket').files.each do |f|
    content_type = case f.key.split(".").last
        when "mp3"
            "audio/mpeg"
        when "ogg"
            "audio/ogg"
        end

    options = {
        'Content-Type' => content_type,
        'Owner' => '{:display_name=>"myadmin", :id=>"myadminid"}',
        'Storage-Class' => 'STANDARD',
        'x-amz-metadata-directive' => 'REPLACE'
    }

    puts directory.files.get(f.key) if f.copy(f.directory.key, f.key, options)
end 

1 个答案:

答案 0 :(得分:1)

我认为可能只是如何指定选项。我想也许您需要指定存储类,例如:

x-amz-storage-class代替Storage-Class

我不确定所有者,但我认为这只是由于谁创建了对象(所以在副本的情况下它会匹配谁可能会运行复制操作)。我不确定这是否可以被覆盖。

希望有所帮助。