Проблемы с отправкой файла в 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') является объектом файла, а не содержимым файла?

Другие вопросы по тегам