2012-01-11 1 views
16

: 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 문서를 업로드 엑셀이나 워드 또는 텍스트 문서 수 없습니다. 제가 누락 된 곳에서 도와주세요!

답변

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

이 서버 '파일'명령에 실제로 의존을 사용합니다. 그 명령이 당신에게주는 것은 클립 클립 검증에서 받아 들여야 할 것입니다.

예를 들어 내 데비안 서버는 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을 변경합니다.

관련 문제