Sto usando il seguente codice per caricare tramite l’API:
# E chiedi a Discourse dove inviarlo.
r = requests.post(
f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
print(
f"Errore nel chiedere dove caricare l'immagine: ricevuto {r.status_code}", file=sys.stderr)
sys.exit(1)
upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']
# Ora mettilo dove ci è stato detto di metterlo.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
print(
f"Errore nel caricare l'immagine nello spazio di archiviazione esterno: ricevuto {r.status_code}", file=sys.stderr)
sys.exit(1)
# E comunica a Discourse che ha funzionato, e ottieni un ID a cui fare riferimento in seguito.
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"Errore nel completare il caricamento: ricevuto {r.status_code}", file=sys.stderr)
sys.exit(1)
image_id = r.json()['id']
Questo funziona con una chiave API “tutto accesso”, ma quando provo a usarne una granulare con lo scope “uploads: create”, ricevo un errore 403 su post a /uploads/generate-presigned-put.
Ciao @mattdm Ho aggiornato l’ambito della chiave API per coprire queste nuove azioni per il nostro flusso di caricamento diretto e ho anche distribuito il tuo sito, fammi sapere se hai ancora altri problemi.