当我使用回形针向我的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文件,但似乎没有上传,因为验证失败了。
答案 0 :(得分:5)
内容类型错误?试试audio / mpeg。
答案 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'
希望这有助于某人。