[RUBY-ON-RAILS] 루비에 업로드 된 파일의 MIME 유형을 감지
RUBY-ON-RAILS루비에 업로드 된 파일의 MIME 유형을 감지
루비 레일에 루비에 업로드 된 파일의 MIME 유형을 감지하는 총알 증거 방법이 있습니까? 나는 SWFupload을 사용하여 JPEG 파일과 PNG 파일을 업로드하고있어 콘텐츠 _ 항상 "응용 프로그램 / octet-stream을"입니다
해결법
-
==============================
1.루비 - filemagic 보석은 그것을 할 것입니다 :
루비 - filemagic 보석은 그것을 할 것입니다 :
require 'filemagic' puts FileMagic.new(FileMagic::MAGIC_MIME).file(__FILE__) # => text/x-ruby; charset=us-ascii
이 보석은 전혀 파일 확장자에 보이지 않는다. 이 파일의 형식을 추측 할 수있는 파일의 내용 및 용도의 비트를 읽습니다.
-
==============================
2.루비 온 레일즈 당신은 할 수 있습니다 :
루비 온 레일즈 당신은 할 수 있습니다 :
MIME::Types.type_for("filename.gif").first.content_type # => "image/gif"
-
==============================
3.당신은 파일의 마법 헤더에이 신뢰할 수있는 방법베이스를 사용할 수 있습니다 :
당신은 파일의 마법 헤더에이 신뢰할 수있는 방법베이스를 사용할 수 있습니다 :
def get_image_extension(local_file_path) png = Regexp.new("\x89PNG".force_encoding("binary")) jpg = Regexp.new("\xff\xd8\xff\xe0\x00\x10JFIF".force_encoding("binary")) jpg2 = Regexp.new("\xff\xd8\xff\xe1(.*){2}Exif".force_encoding("binary")) case IO.read(local_file_path, 10) when /^GIF8/ 'gif' when /^#{png}/ 'png' when /^#{jpg}/ 'jpg' when /^#{jpg2}/ 'jpg' else mime_type = `file #{local_file_path} --mime-type`.gsub("\n", '') # Works on linux and mac raise UnprocessableEntity, "unknown file type" if !mime_type mime_type.split(':')[1].split('/')[1].gsub('x-', '').gsub(/jpeg/, 'jpg').gsub(/text/, 'txt').gsub(/x-/, '') end end
-
==============================
4.루비 - filemagic 보석은 좋은 해결책이지만, (최근 CarrierWave에서 CarrierWave :: MagicMimeTypes 제거의 일부로 제거) libmagic에 추가 종속성을 필요로한다.
루비 - filemagic 보석은 좋은 해결책이지만, (최근 CarrierWave에서 CarrierWave :: MagicMimeTypes 제거의 일부로 제거) libmagic에 추가 종속성을 필요로한다.
당신이 순수 루비 구현에 관심이있는 경우, MimeMagic 보석을 고려! 그것은 freedesktop.org 마임 데이터베이스에 나열된 파일 유형에 대해 잘 작동합니다 :
require 'mimemagic' MimeMagic.by_magic(File.open('Table-Flip-Guy.jpg')).type # => "image/jpeg"
마이크로 소프트 오피스 2007 이상 형식 (XLSX, DOCX 및 PPTX)의 경우, ( "/ 응용 프로그램 압축"일반 사용하면 않는 한있는 거 괜찮 이러한 파일의 MIME 타입) 오버레이를 필요
require 'mimemagic' require 'mimemagic/overlay' MimeMagic.by_magic(File.open('big_spreadsheet.xlsx')).type # => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
-
==============================
5.filemagic 보석은 좋은 해결책이지만 불필요한 보석을 많이 달려있다. (레일 AWS-SDK 코어, ...)
filemagic 보석은 좋은 해결책이지만 불필요한 보석을 많이 달려있다. (레일 AWS-SDK 코어, ...)
앱이 작고 단지 리눅스 또는 OSX에서 실행되는 경우, 파일 프로그램을 사용하여 고려하십시오
require 'shellwords' mimetype = `file --brief --mime-type - < #{Shellwords.shellescape(__FILE__)}`.strip
주 : EXPR과 __FILE__ 교체가 파일 경로가 포함되어 있습니다.
-
==============================
6.mimemagic 보석은 그것을 할 것입니다
mimemagic 보석은 그것을 할 것입니다
https://github.com/minad/mimemagic
공식 문서에서
-
==============================
7.당신이 사용할 수있는
당신이 사용할 수있는
마임 :: Type.lookup_by_extension (extention_name)
감사
from https://stackoverflow.com/questions/4600679/detect-mime-type-of-uploaded-file-in-ruby by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 3 잘못된 멀티 바이트 문자 (US-ASCII) (0) | 2020.02.29 |
---|---|
[RUBY-ON-RAILS] 레일 3, 호환되지 않는 문자 인코딩에 루비 : UTF-8 및 국제화와 ASCII-8BIT (0) | 2020.02.29 |
[RUBY-ON-RAILS] 레일 : 나는 열에서 고유 한 값을 얻을 수있는 방법 (0) | 2020.02.29 |
[RUBY-ON-RAILS] 루비 / 레일 - 변경 값을 변경하지 않고 시간의 시간대, (0) | 2020.02.29 |
[RUBY-ON-RAILS] 트위터 부트 스트랩 CSS와 충돌 활성 관리자 CSS를 레일 (0) | 2020.02.29 |