2 Stimmen

Schwierigkeiten beim Senden einer Datei an Imgur

Ich versuche, die Python Requests-Bibliothek zu verwenden, um ein Bild auf Imgur mithilfe der Imgur-API hochzuladen. Die API gibt einen 400er Fehler zurück und sagt, dass die Datei entweder kein unterstützter Dateityp ist oder beschädigt ist. Ich glaube nicht, dass das Bild beschädigt ist (lokale Ansicht funktioniert einwandfrei), und ich habe es mit .jpg, .jpeg und .png versucht. Hier ist der Code:

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'))}})

Die genaue Fehlermeldung:

{"error":{"message":"Bildformat nicht unterstützt oder Bild ist beschädigt.","request":"\/2\/upload.json","method":"post","format":"json","parameters":"image = file, key = 4adaaf1bd8caec42a5b007405e829eb0"}}

Lassen Sie mich wissen, ob ich weitere Informationen bereitstellen kann. Ich bin ziemlich neu in Python und denke, dass es sich um einen einfachen Fehler handelt. Könnte mir jemand bitte erklären, was es ist?

4voto

ernie Punkte 6267

Ich rate nur, aber wenn ich mir die imgur-API anschaue, scheint es, dass das Bild nur die Dateidaten sein sollte, während die Requests-Bibliothek es in ein Schlüssel-Wert-Paar einbettet (daher zeigt die Antwort "image = file")

Ich würde etwas ähnliches versuchen:

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})

2voto

pnuts Punkte 56398

Hast du versucht, etwas explizit mit folgendem zu versuchen?:

from base64 import b64encode

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

0voto

DrSkippy Punkte 380

Vielleicht möchten Sie open('test.png','rb').read() verwenden, da open('test.png','rb') ein Dateiobjekt und nicht der Inhalt der Datei ist?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X