0

我尝试通过 Google App Engine Sdk 将来自 Flex 应用程序的图像插入到 picasa 网络。我想做一个简单的 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
                })

谢谢,约翰逊。

4

1 回答 1

2

Payload 应该是一个字符串,而不是一个类似文件的对象。它应该如何编码取决于您正在调用的 API - 请参阅 API 的文档以确定它,以及您需要设置的任何其他标头等。您不太可能需要对其进行 base64 编码 - 只需直接传递图像的内容即可。

如果你仍然有问题,你必须比“它不成功”更具体——你会得到什么回应?

于 2011-04-06T01:28:29.080 回答