使用Twitter API和Python上传个人资料图片

3

我想使用html表单从我的硬盘上传图片:

Image file: <input name="imageupload" id="imageupload" type="file" />

然后,我使用以下方式将其上传到 Twitter:
image=self.request.get('imageupload')
image2=base64.b64encode(image)
twitapi.Update_profile_image(image=image2)

给定 twitapi.Update_profile_image:

def Update_profile_image(self,image):
    if not self._oauth_consumer:
        raise TwitterError("The twitter.Api instance must be authenticated.")

    url = '%s/account/update_profile_image.json' % (self.base_url)
    data = {'image':image}

    json = self._FetchUrl(url, post_data=data)
    data = self._ParseAndCheckTwitter(json)
    return data

给定来自twitter-api的_FetchUrl
我总是得到以下结果:
TwitterError: There was a problem with your picture. Probably too big.

任何想法它来自于哪里?谢谢!

1
你验证了每个步骤的成功吗?图片上传是否正确?self.request.get('imageupload') 是否获取到了文件?编码后你能否在其他地方显示图像(尝试 http://jsfiddle.net/hpP45/)? - Jay Neely
4个回答

2

Twitter RESTful API文件 不正确。

不要将 图像二进制 编码为 base64

从您的源中删除 base64 编码部分。

如果您将 图像二进制 编码为 base64 字符串,twitter API会提示:

"...您的图片可能太大,出现了问题。(...) (代码131)"


2
为了正确地通过表单提交图像,您需要包含以下内容:
enctype="multipart/form-data" 

示例

<form  enctype="multipart/form-data" action='/' method="POST">

1

也许你通过表单上传接收到的图像已经是base64编码的了?

然后你又进行了一次编码,这可能会使Twitter服务器端的验证混淆,因为它无法在你上传的文件中找到典型的图像头。


实际上,无论是否对图像进行编码,错误都会发生。 - user375348

1
根据文档,您的镜像:
Must be a valid GIF, JPG, or PNG image of less than 700 kilobytes in size.

因此,请确保您的图像符合这些限制。也许您需要缩小图像,或将其转换为不同的格式。

如果这样做不起作用,请尝试上传另一个非常小的图像,以满足上述限制。至少您可以验证问题是否出在您正在使用的特定图像上。


我遇到了几张图片相同的问题,它们都符合限制条件。问题在于图像的编码。 - user375348

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接