2012-01-11 4 views
16

pdf、word、excel、およびplain text for paperclipへのファイルコンテンツタイプの検証方法は?私のモデルでは

has_attached_file :uploaded_file, 
         :url => "/policy_documents/get/:id", 
         :path => "/public/policy_documents/:id/:basename.:extension" 

    validates_attachment_size :uploaded_file, :less_than => 10.megabytes  
    validates_attachment_presence :uploaded_file 
    validates_attachment_content_type :uploaded_file, :content_type =>['application/pdf', 'application/xlsx'], 
                 :message => ', Only PDF, EXCEL, WORD or TEXT files are allowed. ' 

そしてこの後、それは、唯一のPDFドキュメントをアップロード優れていないか、または単語またはテキストドキュメントすることができます。私がどこに行けばいいのか教えてください!

答えて

42

:content_typeを変更してみてください、あなた自身のためにこれを解決した場合、私は知らないが、あなたが処理したい文書のMIMEタイプが欠落しています

:content_type => ["application/pdf","application/vnd.ms-excel",  
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      "application/msword", 
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
      "text/plain"] 

それとも

validate :correct_content_type, :message => ", Only PDF, EXCEL, WORD or TEXT files are allowed." 


def correct_content_type 
    acceptable_types = ["application/pdf","application/vnd.ms-excel",  
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      "application/msword", 
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
      "text/plain"] 
    acceptable_types.include? uploaded_file.content_type.chomp 
end 
2

カスタム検証を使用するこれは実際にあなたのサーバー「file」コマンドに依存しています。そのコマンドがあなたに返すものは、ペーパークリップの検証で受け入れる必要があるものです。

たとえば、私のDebianサーバは、xlsファイルの "application/msword"を返します。 xlsxファイルの場合、 "application/zip"と表示されます。

私は現在xlsとxlsxファイルを受け入れています。任意のファイルの場合

validates_attachment_content_type :file, :content_type => %w(application/zip application/msword application/vnd.ms-office application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) 
0

あなたはどのCONTENT_TYPEあなたがその文書自体とその手段のコンテンツタイプ、チェックアウトのアップロードがわからない場合は、アップロードし、そしてこの後、開発ログ(または端末)にチェックインされている場合それは...あなたのアプリケーションでそのcontent_typeを変更します。

関連する問題