web-dev-qa-db-ja.com

ファイルのコンテンツタイプをPDF、Word、Excel、およびペーパークリップのプレーンテキストに検証するにはどうすればよいですか?

私のモデルでは:

 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ドキュメントのみで、Excel、Word、テキストドキュメントはアップロードできません。不足している箇所を教えてください。

19
Ravindra

これを自分で解決したかどうかはわかりませんが、処理するドキュメントのMIMEタイプが不足しているため、:content_typeを次のように変更してみてください。

: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
44
engineersmnky

見てください ペーパークリップの拡張機能を検証してください-Ruby on Rails (受け入れられた回答で)

2
cristian

これは実際にはサーバーの「ファイル」コマンドに依存します。そのコマンドが返すのは、ペーパークリップの検証で受け入れる必要があるものです。

たとえば、私の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)
2
Mika

アップロードするファイルについて、その意味のコンテンツタイプがわからない場合は、そのドキュメント自体を使用してアップロードをチェックアウトし、その後、開発ログ(または端末)でそれがどのcontent_typeであるかを確認します...次に変更しますアプリケーションのそのcontent_type。

0
User333