我正在使用 Fog 和 Amazon s3 来管理视频和图像文件。我在为我的文件设置 content_type 时遇到了很多麻烦。
从控制台工作时,我可以浏览并单独更新每个文件的 content_type,然后运行保存。但是,当我尝试对特定目录中的所有文件运行更新时,我没有收到错误消息,但没有任何更新。我已经运行了多种不同的方法,都具有相同的基本思想,并且都设置为打印“已保存!” 如果文件保存。这些方法运行正常并打印出“已保存!”,但是当我回去检查文件时,content_type 仍然为零。
这是我正在做的一个例子:
directory.files.each do |f|
case f.key.split(".").last
when "jpg"
f.content_type = "image/jpeg"
puts "saved!" if f.save
when "mov"
f.content_type = "video/quicktime"
puts "saved!" if f.save
end
end
此外,当我浏览并单独更新每个文件时,保存工作并且 content_type 得到更新,但数据不会持续存在。
例如:
file = directory.files.first
file.content_type = 'video/quicktime'
file.save # returns true
file.content_type # returns 'video/quicktime'
但是,当我在 AWS 中检查文件时,内容类型仍然为零。
有没有更好的(持久的)方法来更新 Fog s3 文件上的 content_type ?我觉得我一定是走错路了。
更新:尝试使用 file#copy 方法:
directory.files.each do |f|
content_type = case f.key.split(".").last
when "jpg"
"image/jpeg"
when "mov"
"video/quicktime"
end
puts "copied!" if f.copy(f.directory.key, f.key, { 'Content-Type' => content_type })
end
我收到一个错误:
Excon::Errors::BadRequest: Expected(200) <=> Actual(400 Bad Request)
from /Users/marybethlee/.rvm/gems/ruby-2.0.0-p0@mothership/gems/excon-0.22.1/lib/excon/middlewares/expects.rb:6:in `response_call'
from /Users/marybethlee/.rvm/gems/ruby-2.0.0-p0@mothership/gems/excon-0.22.1/lib/excon/connection.rb:355:in `response'
from /Users/marybethlee/.rvm/gems/ruby-2.0.0-p0@mothership/gems/excon-0.22.1/lib/excon/connection.rb:249:in `request'
from /Users/marybethlee/.rvm/gems/ruby-2.0.0-p0@mothership/gems/fog-1.11.1/lib/fog/core/connection.rb:21:in `request'
from /Users/marybethlee/.rvm/gems/ruby-2.0.0-p0@mothership/gems/fog-1.11.1/lib/fog/aws/storage.rb:506:in `request'
from /Users/marybethlee/.rvm/gems/ruby-2.0.0-p0@mothership/gems/fog-1.11.1/lib/fog/aws/requests/storage/copy_object.rb:33:in `copy_object'
from /Users/marybethlee/.rvm/gems/ruby-2.0.0-p0@mothership/gems/fog-1.11.1/lib/fog/aws/models/storage/file.rb:93:in `copy'
from (irb):14
from /Users/marybethlee/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'