回形针设置:如果没有扩展名,则扩展为mp3

时间:2011-12-05 20:25:09

标签: ruby-on-rails ruby-on-rails-3 paperclip

我正在开发一个使用paperclip将音频文件保存到Amazon S3的rails 3应用程序。我正在保存从网址传输的大量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

2 个答案:

答案 0 :(得分: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组合。

答案 1 :(得分:0)

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

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

这可以解决您的问题。

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

Original Article

希望这有帮助。