Rails回形针附件验证失败,带.ogg格式

时间:2014-10-01 09:04:07

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

这是我在stackoverflow上的第一篇文章。我正在开发一个rails应用程序,它需要一个歌曲模型,其中有一个由回形针附加的.ogg音频文件。由于某些浏览器的音频格式限制,我使用.ogg格式。

不幸的是,在创建新的歌曲对象时,它似乎无法通过所有格式验证,从而阻止上传音频文件。

我已尝试了多种格式说明,例如音频/ ogg'音频,oga',视频/ ogg' ......但似乎没有工作。上传.mp3文件工作正常,但由于上述原因,我需要使用.ogg。

我使用回形针在应用程序的其他模型中上传图像文件,它工作正常,所以我似乎错过了一些东西......提前感谢您的帮助!

模特,song.rb:

class Song < ActiveRecord::Base
  attr_accessible :name, :lyrics, :track_order, :music_file, :url

  has_attached_file :music_file, dependent: :destroy

  validates_presence_of :name, :lyrics, :track_order, :record_id
  validates_attachment_presence :music_file
  validates_attachment_content_type :music_file, :content_type => ['audio/ogg', 'video/ogg']

  belongs_to :record

  default_scope order('track_order ASC')

  before_validation :set_file_url

  private

  def set_file_url
    self.url = music_file.url
  end

end

我得到的错误:

ArgumentError (uncaught throw #<ActiveModel::Errors:0x0000000560df60 @base=#<Song id: 12, name: "Las Horas", lyrics: "Letra aquí", track_order: 1, record_id: 2, created_at: "2014-09-30 14:06:05", updated_at: "2014-09-30 15:27:25", music_file_file_name: "lshoras.ogg", music_file_content_type: "video/ogg", music_file_file_size: 3220214, music_file_updated_at: "2014-10-01 08:59:56", url: "/system/songs/music_files/000/000/012/original/lsho...">, @messages={:music_file=>["has an extension that does not match its contents"], :name=>[], :lyrics=>[], :track_order=>[]}>):
  app/controllers/songs_controller.rb:33:in `throw'
  app/controllers/songs_controller.rb:33:in `update'

1 个答案:

答案 0 :(得分:2)

似乎您的ogg文件有错误的mime,检查this,您可以看到ogg文件应该有audio/ogg,但您似乎有video/ogg(ogv) 。您可以查看:

file -b --mime lshoras.ogg

如果这不能解决您的问题,您可以检查this以禁用或修改验证:

Paperclip.options[:content_type_mappings] = { ogg: 'application/ogg' }