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 = 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

Maybe you want open('test.png','rb').read() since open('test.png','rb') is a file object rather than the contents of the file?

于 2012-07-11T16:55:13.703 に答える