Python リクエストを使用して画像を gitlab に投稿する方法

okwaves2024-01-25  12

私は Python リクエスト ライブラリを使用するのが初めてで、現在、JIRA からイメージをダウンロードし、そのイメージを Gitlab にアップロードして、後でメモで参照できるようにしようとしています。https://docs に記載されています。 gitlab.com/ee/api/projects.html#upload-a-file。イメージは JIRA から適切にダウンロードされています (ファイルを表示して開くことはできます) が、gitlab に投稿しようとすると、現在エラー 400 Bad Request 応答が返されます。

私のコードは次のようになります:

gl_url = 'https://lab.mygitlabinstance.com/api/v4/projects/%s/uploads' % gl_project_id

def image_post(image_url, file_name, jira_auth, gl_url, gl_token):
    image = requests.get(
        image_url,
        auth=HTTPBasicAuth(*jira_auth),
        stream=True)
    local_file = open(file_name, 'wb')
    image.raw.decode_content = True
    shutil.copyfileobj(image.raw, local_file)
    file = {'file': '@' + file_name}
    value = requests.post(
        gl_url,
        headers={'PRIVATE-TOKEN': gl_token, 'Content-Type': 'multipart/form-data'},
        verify=True,
        files=file
    )
    return value

私の gitlab トークンは同じプログラムの他の部分で動作しているので、それが問題だとは思いません。ご協力いただければ幸いです。

画像のサイズはどれくらいですか?他の画像を投稿してもこのエラーが発生しますか?

– グスタボ川本

2020 年 9 月 3 日 17:46

1

画像は 313 KB です。

– カルム

2020 年 9 月 3 日 18:41



------------------------

これを試してください:

def image_post(image_url, file_name, jira_auth, gl_url, gl_token):
    image = requests.get(
        image_url,
        auth=HTTPBasicAuth(*jira_auth),
        stream=True)
    
    # save file locally
    with open(file_name, 'wb') as f:
        f.write(image.content)
    
    # readfile and send
    file = {'file': open(file_name, 'rb')}
    value = requests.post(
        gl_url,
        headers={'PRIVATE-TOKEN': gl_token},
        verify=True,
        files=file
    )
    return value

あるいはおそらく 2 番目のもの:

あなたの中に何があるか分かりませんr local_file ですが、「@」+filename はカール構文用です。ここではファイルのコンテンツが必要なので、例の行を次の行に修正してみてください: file = {'file': local_file}

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。