2016-10-27 5 views
0

拡張子が.txtの添付ファイルをアップロードする必要がありますが、fileコマンドでmime-type "application/octet-stream"に評価する必要があります。ファイルは機器によって自動的に生成され、アップロードする前に名前を変更することはできません。paperclip 5.1コンテンツタイプのバリデーションが厳しい

class Book < ActiveRecord::Base 
    has_attached_file :excerpt 
    validates_attachment_content_type :excerpt, content_type: { content_typ: ["text/plain", "application/octet-stream"]} 
    validates_attachment_file_name :excerpt, matches: [/txt\z/] 
end 

が、私は常に検出されたコンテンツタイプが推測されたコンテンツタイプと一致しないというエラーが出ます:私は試してみましたエラーメッセージが方法をマニュアルに見えるように述べてい

Command :: file -b --mime '/tmp/313a40bb0448477e051da1e2cba2c20120161027-19345-lrhf6t.txt' 
[paperclip] Content Type Spoof: Filename Sample.txt (text/plain from Headers, ["text/plain"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination. 

その組み合わせを可能にするが、私は回避策のようなものを見つけることができなかった。このdiscussionを見たが、それはv4のためだった。

答えて

2

スペルの間違いcontent_typeキーですか? (あなたはそれがcontent_typとして入力されている。)

は最初の提案が動作しない場合、私はあなたのケースでは、あなたが(READMEのSecurity Validationsセクションの指示に従って)config/initializers/paperclip.rbでこれをやりたいだろうと思う:

Paperclip.options[:content_type_mappings] = { 
    txt: %w(text/plain application/octet-stream) 
} 
1

ポインタのおかげで、クリス。私はREADMEファイルのそのセクションを十分に注意深く読まなかったと思います。 (BTW、タイプミスを修正しても、違いを行っていない。)

したがって、溶液は、次のように

config/initializers/paperclip.rbで:

Paperclip.options[:content_type_mappings] = { 
    txt: %w(application/octet-stream) 
} 

モデルにおいて:

class Book < ActiveRecord::Base 
    has_attached_file :excerpt 
    validates_attachment_file_name :excerpt, matches: [/txt\z/] 
end 

これは、実際の.txtファイルが 'text/plain'か 'application/octet-stream'かにかかわらず動作します。

関連する問題