我正在开发一个使用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
答案 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 match
和gsub
组合。
答案 1 :(得分:0)
您的文件未保存为.mp3的原因是因为您使用的是 open-uri 。将保存代码更改为:
self.audio = URI.parse(recording_url)
self.save
这可以解决您的问题。
发生这种情况的原因是因为open-uri创建了一个没有扩展名的临时文件,并将其提供给Paperclip。
希望这有帮助。