Вставьте изображение в Picasa в Python Google App Engine Sdk через urlfetch - PullRequest
0 голосов
/ 05 апреля 2011

Я пытаюсь вставить изображение из приложения Flex в Picasa Web через Google App Engine Sdk.Я хочу сделать простой urlfetch вместо клиентской библиотеки Python.Следующий код:

    def Insert(self, sessionToken, album_or_uri, title, filename_or_handle):
        result = urlfetch.fetch(url=album_or_uri,
                                method=urlfetch.POST,
                                follow_redirects=True,
                                payload=StringIO(filename_or_handle),
                                headers={'Authorization': 'AuthSub token="' + sessionToken + '"',
                                'Content-Length': str(len(filename_or_handle)),
                                'Content-Type': 'image/jpeg',
                                'Slug': title
                                })

Передача данных в «filename_or_handle» является изображением ByteArray.Однако это не удачно.Я понятия не имею, в чем проблема.Пожалуйста посоветуй.Спасибо.

Решение следующее:

def Insert(self, sessionToken, album_or_uri, title, filename_or_handle):
    image = filename_or_handle.read()
    contentLength = len(image)
    result = urlfetch.fetch(url=album_or_uri,
                method=urlfetch.POST,
                follow_redirects=True,
                payload=image,
                headers={'Authorization': 'AuthSub token="' + sessionToken + '"',
                'Content-Length': contentLength,
                'Content-Type': 'image/jpeg',
                'Slug': title
                })

Спасибо, Джонсон.

1 Ответ

2 голосов
/ 06 апреля 2011

Полезная нагрузка должна быть строкой, а не файловым объектом. То, как это должно быть закодировано, зависит от API, который вы вызываете - посмотрите документацию по API, чтобы определить это, и любые другие заголовки и т. Д., Которые вам нужно установить. Маловероятно, что вам нужно его кодировать в base64 - просто передайте содержимое изображения напрямую.

Если у вас все еще есть проблемы, вам нужно быть более конкретным, чем "это не удалось" - какой ответ вы получите?

...