Ich verwende den folgenden Code zum Hochladen über die API:
# Und fragen Sie Discourse, wohin es gesendet werden soll.
r = requests.post(
f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
print(
f"Fehler beim Fragen, wohin das Bild hochgeladen werden soll: got {r.status_code}", file=sys.stderr)
sys.exit(1)
upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']
# Jetzt legen Sie es dort ab, wo wir angewiesen wurden.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
print(
f"Fehler beim Hochladen des Bildes in den externen Speicher: got {r.status_code}", file=sys.stderr)
sys.exit(1)
# Und teilen Sie Discourse mit, dass es funktioniert hat, und erhalten Sie eine ID, auf die wir später verweisen können.
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"Fehler beim Abschließen des Uploads: got {r.status_code}", file=sys.stderr)
sys.exit(1)
image_id = r.json()['id']
Dies funktioniert mit einem „All Access“-API-Schlüssel, aber wenn ich versuche, einen granularen mit dem „uploads: create“-Bereich zu verwenden, erhalte ich einen 403-Fehler bei post zu /uploads/generate-presigned-put.
Hallo @mattdm, ich habe den Geltungsbereich des API-Schlüssels für diese neuen Aktionen in unserem direkten Upload-Prozess aktualisiert und Ihre Website ebenfalls bereitgestellt. Bitte lassen Sie mich wissen, ob Sie weiterhin Probleme haben.