我正在使用以下代码通过 API 上传:
# 并询问 Discourse 将其发送到何处。
r = requests.post(
f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
print(
f"询问图片上传位置时出错:收到 {r.status_code}", file=sys.stderr)
sys.exit(1)
upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']
# 现在将其放入我们被告知的地方。
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
print(
f"上传图片到外部存储时出错:收到 {r.status_code}", file=sys.stderr)
sys.exit(1)
# 并告诉 Discourse 已成功,并获得一个稍后可以引用的 ID。
r = requests.post(f"https://{DISCOURSE}/uploads/complete-external-upload",
data=f'unique_identifier={upload_uid}', headers=HEADERS)
if r.status_code != 200:
print(f"完成上传时出错:收到 {r.status_code}", file=sys.stderr)
sys.exit(1)
image_id = r.json()['id']
这在使用“完全访问”API 密钥时有效,但当我尝试使用具有“uploads: create”范围的精细密钥时,在 post 到 /uploads/generate-presigned-put 时收到 403 错误。