Функция execute_transforms () API Google Images возвращает сообщение «произошла ошибка» - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь использовать Google Image Manipulation API. Это кажется довольно простым, но когда я вызываю execute_transforms для объекта Image, он генерирует общее «Произошла ошибка»

Значение gcs_file_location правильное, ошибок не будет, пока я не вызову execute_transforms (). Файл изображения не слишком большой.

from google.appengine.api import images


gcs_file_location = '/gs/' + gcs_file_location
img = images.Image(filename=gcs_file_location)
img.resize(width=50, height=50)

# The following code throws "There has been an error"
thumbnail = img.execute_transforms()    

1 Ответ

1 голос
/ 24 апреля 2019

Мне потребовалось некоторое время, но мне удалось воспроизвести ваш сценарий, поэтому я настроил среду Python 2.7 (в соответствии с руководством по Обзор Python API изображений и установил всефайлы, необходимые для Django, используя код из официального репозитория и запустив его с помощью официального руководства для Django.

Затем я модифицировал сервисные опросыдля того, чтобы выполнить функции, которые вызывают эти ошибки.

def index(request):
    filename_gs=request.GET.get("id")
    img = images.Image(filename=filename_gs)
    img.resize(width=1000, height=1000)
    thumbnail = img.execute_transforms()

И я обнаружил, что действительно вы правы, в функции execute_transforms возникает и ошибка и останавливает выполнение. Однако у меня не былоОбобщая ошибка, на которую вы ссылаетесь, я получаю следующее:

  File "/home/polortiz/DJANGOOO/mytry3/python-docs-samples/appengine/standard/django/polls/views.py", line 48, in index
    thumbnail = img.execute_transforms()
  File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/images/__init__.py", line 810, in execute_transforms
    return rpc.get_result()
  File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 615, in get_result
    return self.__get_result_hook(self)
  File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/images/__init__.py", line 898, in execute_transforms_hook
    raise _ToImagesError(e, self._blob_key)
TransformationError

Я провел дальнейшее исследование, чтобы выяснить, какие могут быть проблемы, которые вызывают эти ошибки, и нашел код библиотеки этой функции . Там вы можете увидеть все исключение, которое возникает:

  • BadRequestError: Когда спецификации запросаНеправильно.
  • NotImageError: Когда данные изображения не являются изображением.
  • BadImageError: Когда данные изображения повреждены.
  • LargeImageError: Когда данные изображения приведеныслишком большой для обработки.
  • InvalidBlobKeyError: Когда предоставленный ключ BLOB-объекта недопустим.
  • TransformationError: При возникновении ошибки во время манипулирования изображением.
  • AccessDeniedError: Когда ссылается на ключ BLOB-объектак объекту Google Storage, и приложение не имеет разрешения на доступ к объекту.
  • ObjectNotFoundError: Когда ключ BLOB-объекта ссылается на объект, которого больше не существует.

Итак, для решения вашей проблемы было бы здорово проверить все эти пункты.Отвечая на вопросы, заданные в комментариях:

Является ли django несовместимым с Google Imaging API или мне нужно импортировать WebApp2?

Google Imaging API совместим с Django.И не обязательно использовать WebApp2 для обработки http-запросов и ответов.

...