2

我正在尝试使用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 很熟悉,希望这是一些简单的失误,有人可以解释一下吗?

4

3 回答 3

4

我只是在猜测,但看看 imgur api,看起来 image 应该只是文件数据,而 requests 库将它包装成一个键值对(因此响应显示“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})
于 2012-07-11T17:09:53.653 回答
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'
    }
)
于 2012-07-11T17:10:42.800 回答
0

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

于 2012-07-11T16:55:13.703 回答