使用Python上传头像(Discourse API)

你好 :waving_hand:

我阅读了这些有用的帖子(12);但是,我仍然缺少一些东西,这阻止我使用 API 成功地将头像从 Python 上传到 Discourse。我是我的 Discourse 站点的管理员。

好消息: 如下面所示,它在 Postman 中有效。

坏消息: 我一直无法将其转换为 Python(根据我的尝试,会收到 400 或 422 错误)。我尝试了以下方法:

img_data = requests.get("my_image_url").content

data={
"type": "avatar",
"user_id": user_id,
"synchronous": True,
"file":  img_data
}

url = "<my site>/uploads.json"

response = requests.request("POST", url, headers=headers, data=data)

这会给我一个 400 错误。我也尝试使用本地图像只是为了看看我是否能使其正常工作:

with open('my_local_image.jpg', "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode("utf8")

data={
"type": "avatar",
"user_id": user_id,
"synchronous": True,
"file":  image_b64
}

url = "<my site>/uploads.json"

response = requests.request("POST", url, headers=headers, data=data)

这会给我一个 422 错误:

"failed":"FAILED","message":"undefined method `tempfile\\' for #\\u003cString:0x00007f5befda7af8\\u003e"

:folded_hands: 我觉得我快成功了,但我对使用 API 还不熟悉。任何正确的方向的提示都将不胜感激!

1 个赞

哦!我从这里了解到,我可以在如下使用“url”作为参数:

data={
"type": "avatar",
"user_id": user_id,
"synchronous": True,
"url":  "url_to_my_image"
}

url = "<my_site>/uploads.json"

response = requests.request("POST", url, headers=headers, data=data)

我终于得到了200!

现在,我知道还有第二步需要完成这个过程🤔,让我看看我能做什么……

2 个赞

太棒了!我弄明白了第二步!

url = "https://<my_site>/users/<username>/preferences/avatar/pick.json"

data={
"upload_id": '<id_from_the_1st_step>',
"type":  'uploaded'
}

response = requests.request("PUT", url, headers=headers, data=data)

爱了爱了!:heart:

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.