附加mp3时触发的mp3的Paperclip validates_attachment_content_type

时间:2009-11-17 20:27:45

标签: ruby-on-rails validation mp3 paperclip

当我使用回形针向我的Voice模型添加以下验证时,我正在努力锻炼,当我尝试上传mp3时会触发它:

class Voice < ActiveRecord::Base
  has_attached_file :clip

  validates_attachment_presence :clip
  validates_attachment_content_type :clip, :content_type => [ 'application/mp3', 'application/x-mp3', 'audio/mpeg', 'audio/mp3' ],
                                    :message => 'file must be of filetype .mp3'

  validates_attachment_size :clip, :less_than => 10.megabytes                                    

  validates_presence_of :title      
end

我尝试了很多不同的mp3文件,但似乎没有上传,因为验证失败了。

5 个答案:

答案 0 :(得分:5)

内容类型错误?试试audio / mpeg。

http://www.w3schools.com/media/media_mimeref.asp

答案 1 :(得分:4)

只是愚蠢,抱歉。

我只是删除了验证,在db中查看了content_type被保存为什么('audio / mpg')并将其添加到验证中允许的content_types的aray中。

完成工作: - )

答案 2 :(得分:3)

对于(希望)完整的mp3支持,我使用了以下mimetypes:

validates_attachment_content_type :audio,
  :content_type => [ 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio' ]

答案 3 :(得分:1)

是的,但是如果用户有其他浏览器(或其他版本的浏览器),mp3的内容类型可能会以意想不到的方式解释,而他将无法保存mp3。

答案 4 :(得分:0)

所以,奇怪的是,我今晚遇到了这个问题,上述解决方案都没有为我工作。我收到了这个错误:

`[paperclip] Content Type Spoof: Filename blah_blah_blah.mp3 (audio/mp3 from Headers, ["audio/mpeg"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination.`

我用它作为我的验证器来解决它:

validates_attachment_content_type :recording,
content_type: [
  'application/mp3',
  'application/x-mp3',
  'audio/mpeg',
  ['audio/mpeg'], # note the array around the type
  'audio/mp3'
],
message: 'File must be of filetype .mp3'

希望这有助于某人。