読者です 読者をやめる 読者になる 読者になる

Carrierwave で 独自のversion ファイルを保存する

例えば、wav ファイルを 保存したときに、別バージョンとして mp3 も保存するような場合。

version :mp3 do

  process :convert_mp3

  # この名前が、最終的なファイル名になる。
  # デフォルトで、 mp3_****.wav になっているので、リネーム
  def full_filename for_file
    super.gsub(/^mp3_/, '').gsub(/wav$/, 'mp3')
  end

end

def convert_mp3

  # current_path に、オリジナルのファイルがあります。
  # この関数を抜けた後に、current_path にあるファイルがコピーされて、最終的な位置に保存されます。

  # 一時的な名前
  out_path = current_path.gsub(/wav$/, 'mp3')

  system("lame -V4 #{current_path} #{out_path}")

  # 元ファイルは削除
  File.unlink current_path
  # 元ファイルの位置に配置
  File.rename out_path, current_path

end

実際にはこれだけの記述であると、tmp ファイルが残ってしまったり、コピーが複数発生したりするので、その設定も追加する。