Kir*_*rat 2 rspec ruby-on-rails paperclip ruby-on-rails-4
我正在使用Paperclip我的Rails应用程序进行附加images.我content_type在我的模型中声明了验证
validates_attachment :image,
:content_type => { :content_type => ["image/jpg", "image/gif", "image/png"] }
Run Code Online (Sandbox Code Playgroud)
我有两个例子,一个带有效图像,另一个带有无效图像.
对于无效图像,我只是将.txt文件重命名为a.png
it "Image is valid" do
image = File.new("#{Rails.root}/spec/support/right.png")
expect(FactoryGirl.build(:pin, image: image)).to be_valid
end
it "Image is invalid" do
image = File.new("#{Rails.root}/spec/support/wrong.png")
expect(FactoryGirl.build(:pin, image: image)).to have(1).errors_on(:image_content_type)
end
Run Code Online (Sandbox Code Playgroud)
我希望我的两个例子都能成功运行.但是,我的第二个例子失败了.我没有得到content_type的任何错误wrong.png.
我认为Paperclip的content_type验证实际上会检查上传文件的文件格式(二进制数据编码).但似乎在这里,它只是检查文件扩展名.此验证仅检查上传文件的扩展名吗?
我可能在这里遗漏了一些东西(配置?).Paperclip中是否还有其他验证可用于实现此目的?或者在这种情况下我应该选择自定义验证器吗?
此问题已在Paperclip 4.1.1发布的最新版本中得到解决February 21, 2014.
it "Image is valid" do
image = File.new("#{Rails.root}/spec/support/right.png")
expect(FactoryGirl.build(:pin, image: image)).to be_valid
end
it "Image is invalid" do
image = File.new("#{Rails.root}/spec/support/wrong.png")
expect(FactoryGirl.build(:pin, image: image)).to have(1).errors_on(:image_content_type)
end
Run Code Online (Sandbox Code Playgroud)
经过一番研究发现,当我上传一个invalid image,
例如:欺骗(重命名)wrong.txt文件wrong.png和上传.
在Paperclip的先前版本中,wrong.png通过content_type验证用飞行颜色而不给出任何错误,因为Paperclip仅用于check the extensions上传的文件而不是内容.
然而,在当前版本中Paperclip 4.1.1,相同的欺骗wrong.png未通过验证并在视图中抛出以下错误:
Image has an extension that does not match its contents
Run Code Online (Sandbox Code Playgroud)
在调查服务器日志条目时,我发现了以下内容:
Command :: file -b --mime-type'/ var/folders/tg/8sxl1vss4fb0sqtcrv3lzcfm0000gn/T/a7f21d0002b0d9d91eb158d702cd930320140317-531-swkmb8'[paperclip]内容类型欺骗:Filename wrong.png(["image/png"]),从文件命令中发现的内容类型:text/plain.请参阅文档以允许此组合.
在这里,您可以看到Paperclip实际检查了上传文件的内容,text/plain并且说错了Content Type Spoof.
希望我的发现能够帮助其他人了解Paperclip's content-type验证在一段时间内是如何改进的.
| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |