Проблемы с отправкой файла в Imgur
Я пытаюсь использовать Python запрашивает 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 ответа
Я просто догадываюсь, но, глядя на API imgur, похоже, что изображение должно быть просто данными файла, в то время как библиотека запросов оборачивает его в пару ключ-значение (следовательно, почему ответ показывает "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})
Вы пытались быть откровенным с чем-то вроде следующего:
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'
}
)
Может быть, вы хотите, чтобы open('test.png','rb'). Read(), поскольку open ('test.png', 'rb') является объектом файла, а не содержимым файла?