Вопрос

Я знаю, что могу принять загрузку изображений, имея форму, которая отправляет POST в App Engine следующим образом:

<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>

Затем в коде Python я могу сделать что-то вроде

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

Но как я могу выяснить, каким должен быть тип контента этого изображения, когда позже покажу его пользователю?Кажется, наиболее надежным способом было бы выяснить это из самих данных изображения, но как это легко получить?В пакете изображений google.appengine.api я не увидел ничего подходящего.

Должен ли я просто искать заголовки волшебных изображений в своем собственном коде или где-то уже есть метод для этого?

Редактировать:

Вот упрощенное решение, которое я в итоге использовал, кажется, работает достаточно хорошо для моих целей и позволяет избежать необходимости хранить тип изображения в отдельном поле в хранилище данных:

# 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(имя поля) используйте self.request.POST[имя поля].Это возвращает объект cgi.FieldStorage (подробности см. в документации библиотеки Python), который имеет атрибуты «имя файла», «тип» и «значение».

Другие советы

Попробуйте модуль mimetypes Python, он угадает тип и кодировку контента за вас.

например

>>импортировать mimetypes

>>mimetypes.guess_type("/home/sean/desktop/comedy/30секунды.mp4")

(«видео/mp4», нет)

Согласно моим исследованиям, браузеры, за исключением Internet Explorer (по крайней мере, версии 6), определяют MIME-тип файла по расширению файла.Учитывая, что вам нужны типы mime изображений, для достижения этой цели вы можете использовать простой словарь Python.

К сожалению, я не знаю ни одного метода в Python, который пытался бы угадать тип изображения, прочитав несколько магических байтов (способ информация о файле делает в PHP).Возможно, вы могли бы применить принцип EAFP (проще просить прощения, чем разрешения) с API изображений Google appengine.

Да, похоже, API изображений не сообщает вам тип загруженного вами изображения.В этом случае я бы создал словарь Python для сопоставления расширений файлов с типами mime изображений, а затем попытался бы загрузить изображение, ожидая получения NotImageError() исключение.Если все пойдет хорошо, то я предполагаю, что тип пантомимы был в порядке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top