我正在尝试使用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非常环保,并期待它有一些简单的失误,有人可以解释一下吗?
答案 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')是文件对象而不是文件的内容?