无法将文件发送给Imgur

时间:2012-07-11 16:45:35

标签: python python-requests multipartform-data imgur

我正在尝试使用python requests lib使用imgur api将图片上传到Imgur。 api返回400,表示该文件不是受支持的文件类型或已损坏。我不认为图像已损坏(我可以在本地查看它),我已尝试.jpg.jpeg.png。这是代码:

api_key = "4adaaf1bd8caec42a5b007405e829eb0"
url = "http://api.imgur.com/2/upload.json"
r = requests.post(url, data={'key': api_key, 'image':{'file': ('test.png', open('test.png', 'rb'))}})

确切的错误讯息:

{"error":{"message":"Image format not supported, or image is corrupt.","request":"\/2\/upload.json","method":"post","format":"json","parameters":"image = file, key = 4adaaf1bd8caec42a5b007405e829eb0"}}

如果我能提供更多信息,请告诉我。我对Python非常环保,并期待它有一些简单的失误,有人可以解释一下吗?

3 个答案:

答案 0 :(得分:4)

我只是猜测,但是看看imgur api,看起来图像应该只是文件数据,而请求库将它包装成一个键值对(因此响应显示为“image = file”) )

我会尝试类似的事情:

import base64
api_key = "4adaaf1bd8caec42a5b007405e829eb0"
url = "http://api.imgur.com/2/upload.json"
fh = open('test.png', 'rb');
base64img = base64.b64encode(fh.read())
r = requests.post(url, data={'key': api_key, 'image':base64img})

答案 1 :(得分:2)

您是否尝试使用以下内容明确?:

from base64 import b64encode

requests.post(
    url, 
    data = {
        'key': api_key, 
        'image': b64encode(open('file1.png', 'rb').read()),
        'type': 'base64',
        'name': 'file1.png',
        'title': 'Picture no. 1'
    }
)

答案 2 :(得分:0)

也许你想要打开('test.png','rb')。read()因为open('test.png','rb')是文件对象而不是文件的内容?