문제

나는 앱 엔진에 게시물이있는 양식을 가지고 이미지 업로드를 수락 할 수 있다는 것을 알고 있습니다.

<form action="/upload_received" enctype="multipart/form-data" method="post">
<div><input type="file" name="img"/></div>
<div><input type="submit" value="Upload Image"></div>
</form>

그런 다음 파이썬 코드에서 나는 다음과 같은 것을 할 수 있습니다.

image = self.request.get("img")

그러나 나중에이 이미지의 컨텐츠 유형이 나중에 사용자에게 보여줄 때 어떻게 해야하는지 어떻게 알아낼 수 있습니까? 가장 강력한 방법은 이미지 데이터 자체에서 이것을 알아내는 것이지만 어떻게 쉽게 얻는가? Google.appengine.api 이미지 패키지에서 적합한 것을 보지 못했습니다.

내 코드에서 Magic Image 헤더를 찾아야합니까, 아니면 이미 어딘가에 대한 방법이 있습니까?

편집하다:

여기에 내가 사용한 단순한 솔루션이 있습니다. 내 목적으로 충분히 잘 작동하는 것 같습니다. 이미지 유형을 데이터 저장소에서 별도의 필드로 저장하지 않아도됩니다.

# Given an image, returns the mime type or None if could not detect.
def detect_mime_from_image_data(self, image):
    if image[1:4] == 'PNG': return 'image/png'
    if image[0:3] == 'GIF': return 'image/gif'
    if image[6:10] == 'JFIF': return 'image/jpeg'
    return None
도움이 되었습니까?

해결책

self.request.get (FieldName)을 사용하는 대신 self.request.post [FieldName]을 사용하십시오. 'Filename', 'Type'및 'value'속성이있는 CGI.FieldStorage 객체 (자세한 내용은 Python Library Docs 참조)를 반환합니다.

다른 팁

Python Mimetypes 모듈을 사용해보십시오. 콘텐츠 유형과 인코딩을 추측하고,

예를 들어

>> 모방형 수입

>> mimetypes.guess_type ( "/home/sean/desktop/comedy/30seconds.mp4")

( '비디오/mp4', 없음)

내 연구에 따르면 인터넷 익스플로러 (적어도 버전 6)를 제외한 브라우저는 파일의 확장자를 사용하여 파일 Mime 유형을 결정합니다. 이미지 Mime 유형을 원한다는 점을 감안할 때이를 달성하기 위해 간단한 Python 사전을 사용할 수 있습니다.

불행히도 나는 마법 바이트를 읽음으로써 이미지 유형을 추측하려고하는 파이썬의 어떤 방법을 모른다 (The Way fileInfo php). Google Appengine Image API와 함께 EAFP (허가보다 용서를 요청하기 쉬운) 원칙을 적용 할 수 있습니다.

예, 이미지 API가로드 한 이미지 유형을 알려주지 않는 것 같습니다. 이 경우 내가하는 것은 해당 파이썬 사전을 구축하여 파일 확장을 이미지 Mime 유형에 매핑하고 이미지를로드하려고 시도하는 것입니다. NotImageError() 예외. 모든 것이 잘되면 마임 유형이 괜찮다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top