我将Rails 4.0.0和Paperclip 4.1.1一起用于附加mp3和pdf文件。我正在使用Capybara在Rspec中编写集成测试。
我对两种文件都有内容类型和文件名验证。
class Song < ActiveRecord::Base
validates :title, presence: true
validates :writeup, presence: true
has_attached_file :mp3
validates_attachment :mp3,
:content_type => { :content_type => "audio/mp3" },
:file_name => { :matches => [/mp3\Z/] }
has_attached_file :chords
validates_attachment :chords,
:content_type => { :content_type => 'application/pdf' },
:file_name => { :matches => [/pdf\Z/] }
end
我在集成测试中使用它来填充有效歌曲的属性:
def fill_in_valid_song
fill_in("Title", with: "Valid Song")
fill_in("Writeup", with: "Description of song")
attach_file("Mp3", File.join(Rails.root, "/spec/factories/Amazing_Grace.mp3" ))
attach_file("Chords", File.join(Rails.root, "/spec/factories/FakeChordChart.pdf" ))
end
当我运行集成测试以创建有效的歌曲时,会接受pdf文件,但mp3文件无法通过内容类型验证。
当我自己在浏览器中按照相同的步骤进行操作时,歌曲成功上传,没有错误。模型规格也使用相同的文件传递。
我以为附加文件时问题可能出在“ Mp3”中的大写字母“ M”上,但这只是为了指定附件随附的文件字段。当我尝试将其更改为小写的“ m”时,错误更改为Capybara无法找到该字段。
将mp3文件的内容类型验证更改为:
validates_attachment :mp3,
:content_type => { :content_type => ["audio/mpeg", "audio/mp3"] },
:file_name => { :matches => [/mp3\Z/] }
mp3文件的RFC定义的MIME类型为audio/mpeg
。但是,某些浏览器会加载它们,audio/mp3
这可能就是为什么它可以通过浏览器工作的原因。
如果这不起作用,您还可以添加,audio/mpeg3
并且audio/x-mpeg-3
正如我所看到的,它们也被使用了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句