이것은 브라우저마다 다릅니다. 마임 유형은 브라우저에 의해 컨텐츠 유형으로 설정됩니다. 이는 브라우저 구현 및 클라이언트 시스템에 존재할 수있는 클라이언트 측 MIME 유형 설정에 따라 다릅니다.
마임 유형 (콘텐츠 유형)만으로는 문서 유형을 확인하는 것이 신뢰할 수 없다는 결론에 도달했습니다. MIME 형식과 파일 확장명을 검사해야합니다. 파일 확장자만으로도 그다지 신뢰할 수는 없지만 두 파일의 결합이 합리적으로 실행 가능할 수 있습니다.
슬프게도, 상자에서 나온 문서 클립은 파일 확장명에 의한 유효성 검사를 지원하지 않으므로 사용자 지정 코드가 필요합니다. 여기에 사용자 지정 유효성 검사와 같은 해낸 것입니다 :
has_attached_file :file, ...
validate :mime_type_or_file_extension
private
def mime_type_or_file_extension
if self.file.present? &&
!VALID_UPLOAD_FILE_CONTENT_TYPES.include?(self.file_content_type) &&
!VALID_UPLOAD_FILE_EXTENSIONS.include?(Pathname.new(self.file_file_name).extname[1..-1])
self.errors.add(:file_file_name, "must be one of ." + VALID_UPLOAD_FILE_EXTENSIONS.join(' .'))
end
end
경우 VALID_UPLOAD_FILE_CONTENT_TYPES
및 VALID_UPLOAD_FILE_EXTENSIONS
은 우리가 초기화에서 정의한 두 개의 배열입니다. 우리의 첨부 파일을 "파일"이라고 부릅니다.
아마도 이와 비슷한 내용이 풀 요청으로 Paperclip gem에 추가 될 수 있습니다. 시간을 찾아 볼게.
업데이트 (12/23/2011) @Jamsi가 다운로드에 대해 질문했습니다. 우리는과 같이, 컨트롤러에서 응답 헤더의 내용 - 처리 및 내용 - 형식을 설정
@upload 우리의 파일 (종이 클립) 개체입니다
response.headers['Content-Disposition'] = "attachment; filename=#{@upload.file_file_name}"
response.headers['Content-Type'] = Rack::Mime.mime_type(File.extname(@upload.file_file_name))
.
감사합니다. 유효성 검사를 처리합니다. 다운로드시 Content-Disposition을 어떻게 변경합니까? (Docx 파일은 나를 위해 .zip 파일로 다운로드) – Jamsi
@ 잠씨 환영합니다. 답을 원한다면 받아들이십시오. (왼쪽의 큰 체크 표시를 누르십시오) - 여기 두 점수 모두 도움이 될 것입니다. [faq # 평판]을 참조하십시오. 다운로드와 관련하여, 주석 필드의 코드를 제대로 포맷 할 수 없기 때문에 대답을 업데이트하고 있습니다. –