2016-04-27 6 views
2

私はユーザーにmp3のアップロードを許可しています。何らかの理由で、一部のmp3ファイルのみがアップロードされ、他のものはアップロードされません。私は作業ファイルと非作業ファイルの間に明確な違いは見当たりません。Ruby on rails。 Paperclip mp3の検証に失敗しました

class Song < ActiveRecord::Base 
    belongs_to :user 
    has_attached_file :audio, :restricted_characters => /[&$+,\/:;[email protected]<>\[\]\{\}\|\\\^~%#]/, dependent: :destroy 
    validates_attachment_presence :audio 
    validates_attachment_content_type :audio, :content_type => [ 'audio/mpeg', 'audio/mp3' ] 
    validates_attachment_size :audio, :less_than => 20.megabytes 
end 

エラーが発生したファイルのサーバー出力は、です。

Command :: file -b --mime '/tmp/acf7bcfce06ffcaa55511087ea2e486f20160427-7322-y1lyj6.mp3' 
[paperclip] Content Type Spoof: Filename leyinnata.mp3 (audio/mp3 from Headers, ["audio/mpeg"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination. 

だから、ファイルがapplication/octet-streamの代わりaudio/mp3として見られていると私は理由を知りません。

私はドキュメントを読むの提案に留意し、可能な解決策が見つかりました:

paperclip.rb

Paperclip.options[:content_type_mappings] = { 
    :audio=> 'application/octet-stream' 
} 

、これは何もしませんが。 (私はサーバーを再起動しました)

なぜ動作しないのか分かりませんし、今は非常に不満を感じています。どんな助けでも感謝します、ありがとう。

UPDATE:

は、より多くのオーディオファイルの種類を指定するには、任意の違いを確認していないようです。

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' ] 

私もvalidates_attachment_content_type などにapplication/octet-streamを追加しようとしています。

validates_attachment_content_type :audio, :content_type => [ 'application/octet-stream', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio' ] 

いいえ運がありません。

私は誰かが自分のenvironment.rbのファイルに

Paperclip.options[:content_type_mappings] = { 
    audio: "application/octet-stream" 
} 

を追加しました。これは私にとってもうまくいかない。

UPDATE 2:paperclip.rbで

、追加:

module Paperclip 
    # do not require any validations 
    REQUIRED_VALIDATORS = [] 

    # do not complain when missing validations 
    class Attachment 
    def missing_required_validator? 
     false 
    end 
    end 

    # skip media type spoof detection 
    module Validators 
    class MediaTypeSpoofDetectionValidator < ActiveModel::EachValidator 
     def validate_each(record, attribute, value) 
     true 
     end 
    end 
    end 
end 

は私が必要なものをアップロードすることができますが、これはなりすましの検証をスキップして、私は危険な可能性が想像してみてください。私のユーザーは、ウェブサイトの別の部分に画像をアップロードすることも許可されています。私は今、攻撃することができないと知っています。

UPDATE 3:

私は私のpaperclip.rb

module Paperclip 
    class MediaTypeSpoofDetector 
    def spoofed? 
     false 
    end 
    end 
end 

を追加しました。これは正常に動作しているようです。もし誰かがより良い解決策を考え出すことができたら、私は自分の質問に答えるでしょう。

答えて

5

[OK]を私は、私は「アップデート」に入れてすべてを削除し、

+0

Worked!また、Rails4 with paperclip 4.x –

0

多分、あなたはmp3タイプのバリデーションでより具体化しなければなりません。例のように 、

あなたは

validates_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' ] 

・ホープこれはあなたの問題を解決する必要があります。お知らせください。

+0

ねえ、おかげで返事をpaperclip.rbするが、それは解決しない

Paperclip.options[:content_type_mappings] = { :mp3 => "application/octet-stream" } 

を追加することによって、それを解決しました。私はまったく同じ結果を得る。 –

関連する問題