Estoy usando el siguiente código para subir a través de la API:
# Y le preguntamos a Discourse a dónde enviarlo.
r = requests.post(
f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
print(
f"Error al preguntar dónde subir la imagen: se obtuvo {r.status_code}", file=sys.stderr)
sys.exit(1)
upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']
# Ahora lo ponemos donde se nos indicó.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
print(
f"Error al subir la imagen al almacenamiento externo: se obtuvo {r.status_code}", file=sys.stderr)
sys.exit(1)
# Y le decimos a Discourse que funcionó, y obtenemos un id al que podemos referenciar más tarde.
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"Error al completar la subida: se obtuvo {r.status_code}", file=sys.stderr)
sys.exit(1)
image_id = r.json()['id']
Esto funciona con una clave API de “acceso total”, pero cuando intento usar una granular con el ámbito “uploads: create”, obtengo un error 403 en post a /uploads/generate-presigned-put.
Hola @mattdm He actualizado el ámbito de la clave de API para cubrir estas nuevas acciones en nuestro flujo de carga directa y también he implementado tu sitio. Por favor, házmelo saber si sigues teniendo problemas.