我有一个Rails应用程序,用户可以提交要上传的mp3文件。我想在它们上传时设置Ruby对象属性。TagLib让我可以轻松地获取元数据,在本地我可以很好地做到这一点,但是在将对象保存到Amazon S3之前,我很难找到如何访问它。回形针表示对象保存在内存中,直到您保存它们。
附件在保存之前存储在哪里,我如何访问它们?模型上的path属性是回形针将在S3上存储文件(将来时)的位置。
作为参考,我试图在我的声音文件上运行before_[attachment name]_post_process
过滤器,以获取文件的秒数长度,并将其设置为属性。
我在回形针文档中找不到这个(如果可以,请让我知道),但事实证明,在模型类中指定的附件名称是对象。使用TagLib,您可以在保存之前访问声音的属性,如下所示:
# app/models/sound.rb
…code…
has_attached_file :soundfile
vv same name ^^
before_soundfile_post_process :set_song_attrs
…code…
def set_song_attrs
TagLib::FileRef.open(soundfile.queued_for_write[:original].path) do |file|
self.length = file.audio_properties.length
self.artist = file.tag.artist
end
end