设置:
ruby 1.8.6
rails 2.2.2
attachment_fu - not sure (it's vendorized), but last entry in CHANGELOG is "Apr 17 2008"
aws-s3 (0.6.3)
aws-sdk (2.1.13)
aws-sdk-core (2.1.13)
aws-sdk-resources (2.1.13)
我有一个这样使用的模型attachment_fu
:
has_attachment :storage => :s3,
:path_prefix => "vip_uploads#{("_"+RAILS_ENV) if RAILS_ENV != "production"}",
:max_size => 100.megabytes,
:processor => :mp3
s3 的东西都设置得很好——如果我删除了这个processor
选项,那么上传到 s3 就可以了。
我的 mp3 处理器将 wav 文件转换为 mp3,如下所示:
module Technoweenie # :nodoc:
module AttachmentFu # :nodoc:
module Processors
module Mp3Processor
def self.included(base)
base.send :extend, ClassMethods
base.alias_method_chain :process_attachment, :processing
end
module ClassMethods
end
protected
def process_attachment_with_processing
self.convert_to_mp3
end
# Convert to mp3 and set some metadata
def convert_to_mp3(options={})
#do the conversion with ffmpeg
mp3_temp_path = "#{self.temp_path}.mp3"
cmd = "ffmpeg -i #{self.temp_path} -metadata title=\"#{self.filename.gsub("\.wav","")}\" -metadata artist=\"Vip Studio Sessions\" -metadata album=\"Uploads\" -vn -ar 44100 -ac 2 -ab 320k -f mp3 #{mp3_temp_path}"
`#{cmd}`
#copy this file back into temp_data
self.copy_to_temp_file(mp3_temp_path)
#update attributes
self.filename = self.filename.gsub(/\.wav$/,".mp3")
self.content_type = "audio/mpeg"
self.set_size_from_temp_path
end
end
end
end
end
所有转换的东西似乎都在工作,因为它在 tmp 文件夹中创建了一个新的 mp3 文件,文件名保存在 中mp3_temp_path
,并在数据库中记录。但由于某种原因,生成的文件不会被推送到 s3。我有一种感觉,我只需要设置一些访问器来处理 temp_data 或 temp_file 什么的。我试过这个
self.temp_path = mp3_temp_path
和
self.temp_data = File.read(mp3_temp_path)
和
self.temp_path = write_to_temp_file(File.read(mp3_temp_path))
目前,正如您在我的代码中看到的那样,我正在尝试这个:
self.copy_to_temp_file(mp3_temp_path)
但它们都不起作用。这些尝试是基于查看预先存在的处理器(例如 rmagick)并查看它们的功能。他们似乎和我做同样的事情,但由于他们都是关于缩略图的,所以很容易在翻译中丢失一些东西。
谁能看到我错过了什么?谢谢,马克斯