4

私は Paperclip を初めて使用しましたが、すべてがかなり高速に動作するように見えました。ただし、ユーザーにPNGまたはJPGのみをアップロードさせようとしています.JPGをアップロードしていて、content_typeがJPGに対して検証されますが、それでも無効であると表示されます.

PNG content_type を削除しようとしましたが、役に立ちませんでした。

私も使ってみましhas_attached_fileたが、 :content_type などを無視しているようです。JPGをアップロードする場合は:content_type => "image/png"、エラーにはなりません。

助言がありますか?

    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 だけです。どうやってやるの?

4

3 に答える 3

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別の方法は、特定のコンテンツ タイプを扱っているかどうかを確認するために使用することです。以下は、ライブ アプリの 1 つの例です。

   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

ラムダは、本当にcontent-type必要なものかどうかを判断する方法にすぎません (つまり、JPG 画像のみを許可します)。(ビデオではなく) 画像の存在を検証するには、次のことを行う必要があります。validates_attachment_content_type

于 2013-11-11T09:26:38.100 に答える
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/ を試すだけでうまくいきましたが、具体的にするのが好きです。

于 2014-01-04T23:47:20.643 に答える
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">}
于 2017-05-10T04:03:26.700 に答える