예를 들어 BLOB와 같은 곳에 여러 파일을 저장하려고한다고 가정 해 봅시다. 웹 페이지를 통해 이러한 파일을 정리하고 클라이언트가 올바른 응용 프로그램 / 뷰어를 자동으로 열도록한다고 가정하겠습니다.
가정 : 브라우저는 HTTP 응답에서 mime-type (content-type?) 헤더가 사용할 애플리케이션 / 뷰어를 파악합니다.
해당 가정을 기반으로 파일의 바이트 외에도 MIME 유형을 저장하려고합니다.
파일의 MIME 유형을 어떻게 찾을 수 있습니까? 저는 현재 Mac에 있지만 Windows에서도 작동합니다.
파일을 웹 페이지에 게시 할 때 브라우저가이 정보를 추가합니까?
이 정보를 찾기위한 깔끔한 파이썬 라이브러리가 있습니까? WebService 또는 다운로드 가능한 데이터베이스입니까?
답변
toivotuo가 제안한 python-magic 방법은 구식입니다. Python-magic의 현재 트렁크는 Github에 있으며 MIME 유형을 찾는 readme를 기반으로 다음과 같이 수행됩니다.
# For MIME types
import magic
mime = magic.Magic(mime=True)
mime.from_file("testdata/test.pdf") # 'application/pdf'
답변
표준 라이브러리 의 mimetypes 모듈 은 파일 확장자에서 MIME 유형을 결정 / 추측합니다.
사용자가 파일을 업로드하는 경우 HTTP 게시물에는 데이터와 함께 파일의 MIME 유형이 포함됩니다. 예를 들어 Django는이 데이터를 UploadedFile 객체 의 속성으로 사용할 수있게 합니다.
답변
mimetypes 라이브러리를 사용하는 것보다 더 안정적인 방법은 python-magic 패키지를 사용하는 것입니다.
import magic
m = magic.open(magic.MAGIC_MIME)
m.load()
m.file("/tmp/document.pdf")
이것은 file (1)을 사용하는 것과 같습니다.
장고에서는 MIME 형식이 UploadedFile.content_type과 일치하는지 확인할 수도 있습니다.
답변
이것은 매우 쉬운 것 같습니다
>>> from mimetypes import MimeTypes
>>> import urllib
>>> mime = MimeTypes()
>>> url = urllib.pathname2url('Upload.xml')
>>> mime_type = mime.guess_type(url)
>>> print mime_type
('application/xml', None)
Old Post를 참조하십시오
업데이트 -@Garrets 의견에 따라 python 3에서는 더 간단합니다.
import mimetypes
print(mimetypes.guess_type("sample.html"))
답변
libmagic을 감싸는 3 개의 서로 다른 라이브러리가 있습니다.
그중 2 개는 pypi에서 사용할 수 있습니다 (pip 설치가 작동합니다).
- filemagic
- 파이썬 매직
그리고 python-magic과 유사한 또 다른 파일은 최신 libmagic 소스에서 직접 사용할 수 있으며 Linux 배포판에있을 수 있습니다.
데비안에서 python-magic 패키지는 이것에 관한 것이며 toivotuo로 사용되며 Simon Zimmermann이 말한대로 사용되지 않습니다 (IMHO).
libmagic의 원래 작성자가 다른 테이크를 취하는 것 같습니다.
너무 나쁜 것은 pypi에서 직접 사용할 수 없습니다.
답변
파이썬 2.6에서 :
mime = subprocess.Popen("/usr/bin/file --mime PATH", shell=True, \
stdout=subprocess.PIPE).communicate()[0]
답변
2017 년 업데이트
github에 갈 필요가 없습니다 .PyPi에 다른 이름으로 있습니다.
pip3 install --user python-magic
# or:
sudo apt install python3-magic # Ubuntu distro package
코드를 단순화 할 수도 있습니다.
>>> import magic
>>> magic.from_file('/tmp/img_3304.jpg', mime=True)
'image/jpeg'