2011-12-05 68 views
1

我正在使用回形针将音频文件保存到Amazon S3的Rails 3应用程序。我正在保存大量正在通过网址传输的MP3文件,但它们正在传输而没有扩展名。我知道这些文件是mp3文件,但在回形针中它们没有扩展名。如果没有提供扩展名,如何将扩展名设置为mp3?回形针组:扩展为mp3,如果没有扩展

has_attached_file :audio, 
    :storage => :s3, 
    :s3_credentials => "#{Rails.root}/config/aws.yml", 
    :hash_secret => 'secret', 
    :hash_data => ':class/:attachment/:id', 
    :path   => ':rails_env/:class/:id/:style/:hash.:extension' 

def transfer_to_s3 
    io = open(URI.parse(recording_url + '.mp3'))   
    self.audio = io 
    self.save 
end 

回答

0

这是一个猜测,但试试这个:..

变化:

has_attached_file :photo, :url => "/:class/:attachment/:id/:style_:basename.:extension" 

要:

has_attached_file :photo, :url => lambda { |attachment| { :url => (attachment.match(/mp3/).nil? ? "/:class/:attachment/:id/:style_:basename.mp3" : "/:class/:attachment/:id/:style_:basename.:extension") } 

只是一个大胆的想法。那里可能会有一些语法上的破坏,但也许会推动你朝着正确的方向前进。对不起:D

你也可以做after_save matchgsub组合。

0

您的文件未被保存为.mp3的原因是因为您使用的是open-uri。更改保存代码为:

self.audio = URI.parse(recording_url) 
self.save 

这应该可以解决您的问题。

发生这种情况的原因是因为open-uri创建了一个没有扩展名的临时文件并将其提供给Paperclip。

Original Article

希望这有助于。