2011-12-05 10 views
1

私は、クリップクリップを使用してAmazon S3にオーディオファイルを保存するレール3アプリケーションで作業しています。私は、URLから転送されている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

は、この情報がお役に立てば幸いです。