私は 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}