我是Paperclip的新手,这一切看起来都很快。我试图让用户只上传PNG或JPG,虽然我上传了一个JPG并且我的content_type验证了JPG但它仍然无效。
我尝试删除PNG content_type,但无济于事。
我也尝试过使用has_attached_file
,但它似乎忽略了:content_type和stuff。因为我只上传了:content_type => "image/png"
的JPG;它没有
给出错误。
有什么建议吗?
validates_attachment :avatar, :styles => {
:medium => "300x300",
:thumb => "100x100"
}, :content_type => {
:content_type => "image/jpg",
:content_type => "image/png"
},
:size => { :in => 0..1.megabytes }
噢,虽然我在这里;我想让我的拇指和中等到固定的宽度。所以没有缩放像100x80,但只有100x100。我怎么能这样做?
答案 0 :(得分:5)
您似乎正在尝试使用一些Paperclip validation
,您可以在此处查看:Paperclip - Validate File Type but not Presence
根据答案,您可以使用:
validates_attachment_content_type :sound, :content_type => ['audio/mp3', 'application/x-mp3'], :if => :sound_attached?
另一种方法是使用lambda
检查您是否正在处理特定的内容类型。以下是我们的一个实时应用程序的示例:
has_attached_file :attachment,
styles: lambda { |a| a.instance.is_image? ? {:small => "x200>", :medium => "x300>", :large => "x400>"} : {:thumb => { :geometry => "100x100#", :format => 'jpg', :time => 10}, :medium => { :geometry => "300x300#", :format => 'jpg', :time => 10}}}
def is_image?
attachment.instance.attachment_content_type =~ %r(image)
end
Lambda只是衡量content-type
是否符合您需要的方法(I.E您只允许JPG图像)。为了验证图像(而不是视频)的存在,您需要validates_attachment_content_type
答案 1 :(得分:3)
今晚我遇到了同样的问题,原来我需要image / jpeg和image / jpg
validates_attachment :avatar, :styles => {
:medium => "300x300",
:thumb => "100x100"
}, :content_type => {
:content_type => "image/jpg",
:content_type => "image/jpeg",
:content_type => "image/png"
},
:size => { :in => 0..1.megabytes }
只是尝试/ ^ image /时才有效,但我喜欢具体。
答案 2 :(得分:0)
我比较了来自服务器的日志,并注意到内容类型标题上的不同。它应该是' image / jpeg'
Parameters: {"avatar"=>#<ActionDispatch::Http::UploadedFile:0x0055b7d4c30870 @tempfile=#<Tempfile:/tmp/RackMultipart20170510-21515-11ld4ji.jpg>, @original_filename="IMAG0303.jpg", @content_type="multipart/form-data", @headers="Content-Disposition: form-data; name=\"avatar\"; filename=\"IMAG0303.jpg\"\r\nContent-Type: multipart/form-data\r\nContent-Length: 1057779\r\n">}
Parameters: {"avatar"=>#<ActionDispatch::Http::UploadedFile:0x0055b7d3ec3408 @tempfile=#<Tempfile:/tmp/RackMultipart20170510-21515-1l0x8sw.jpg>, @original_filename="2017.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"avatar\"; filename=\"photo_10/05/2017.jpg\"\r\nContent-Type: image/jpeg\r\n">}