Загрузите файл WAV с помощью Paperclip и сохраните версии .wav и .mp3.

У меня есть приложение Rails, где люди могут использовать звуковой редактор в браузере для создания файлов wav и загрузки их на сервер.

Я использую Paperclip для обработки загрузки звукового файла.

Я хотел бы иметь возможность конвертировать файл wav в mp3, но сохранить оба файла.

Я читал о процессорах Paperclip, но не знаю, как их использовать для получения обоих файлов, а не только для преобразования в mp3.


person Daniel X Moore    schedule 10.09.2010    source источник


Ответы (1)


Хорошо, это, вероятно, не оптимально, но работает довольно хорошо. В итоге я добавил еще одно приложение к моему классу Sound для mp3 и добавил фильтр before_validation, чтобы подключиться к нему. Кроме того, поскольку у меня были некоторые существующие вложения wav, я создал метод reconvert_to_mp3 для обработки миграции существующих записей.

has_attached_file :mp3,
  :storage => :s3,
  :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
  :path => "sounds/:id/:style.:extension"

before_validation :convert_to_mp3

def reconvert_to_mp3
  wavfile = Tempfile.new(".wav")
  wavfile.binmode

  open(wav.url) do |f|
    wavfile << f.read
  end

  wavfile.close

  convert_tempfile(wavfile)
end

def convert_to_mp3
  tempfile = wav.queued_for_write[:original]

  unless tempfile.nil?
    convert_tempfile(tempfile)
  end
end

def convert_tempfile(tempfile)
  dst = Tempfile.new(".mp3")

  cmd_args = [File.expand_path(tempfile.path), File.expand_path(dst.path)]
  system("lame", *cmd_args)

  dst.binmode
  io = StringIO.new(dst.read)
  dst.close

  io.original_filename = "sound.mp3"
  io.content_type = "audio/mpeg"

  self.mp3 = io
end
person Daniel X Moore    schedule 10.09.2010
comment
Разве внизу не должно быть dst.unlink? Или это удалит файл до того, как Скрепка сможет его захватить? - person user1618143; 19.12.2013
comment
@daniel Спасибо за решение, оно отлично работает. Но я столкнулся с некоторой проблемой в производственном режиме. Ошибка выглядит следующим образом: Error reading headers in mp3 input file Не могли бы вы помочь мне с этим? Большое спасибо. - person Vishal; 23.08.2017