J’utilise le code suivant pour téléverser via l’API :
# Et demandons à Discourse où l'envoyer.
r = requests.post(
f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
print(
f"Erreur lors de la demande de l'emplacement de téléversement de l'image : reçu {r.status_code}", file=sys.stderr)
sys.exit(1)
upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']
# Maintenant, mettons-la là où on nous l'a dit.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
print(
f"Erreur lors du téléversement de l'image vers le stockage externe : reçu {r.status_code}", file=sys.stderr)
sys.exit(1)
# Et disons à Discourse que cela a fonctionné, et obtenons un identifiant auquel nous pourrons faire référence plus tard.
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"Erreur lors de la complétion du téléversement : reçu {r.status_code}", file=sys.stderr)
sys.exit(1)
image_id = r.json()['id']
Cela fonctionne avec une clé API “tous accès”, mais lorsque j’essaie d’en utiliser une granulaire avec la portée “uploads: create”, j’obtiens une erreur 403 sur post vers /uploads/generate-presigned-put.
Salut @mattdm J’ai mis à jour la portée de la clé API pour couvrir ces nouvelles actions pour notre flux de téléchargement direct, et j’ai également déployé votre site, faites-moi savoir si vous rencontrez encore des problèmes.