Estou usando o seguinte código para fazer upload via API:
# E pergunte ao Discourse para onde enviá-lo.
r = requests.post(
f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
print(
f"Erro ao perguntar para onde enviar a imagem: obteve {r.status_code}", file=sys.stderr)
sys.exit(1)
upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']
# Agora coloque-o onde nos foi dito para colocar.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
print(
f"Erro ao enviar imagem para armazenamento externo: obteve {r.status_code}", file=sys.stderr)
sys.exit(1)
# E diga ao Discourse que funcionou, e obtenha um ID para o qual possamos fazer referência mais 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"Erro ao completar o upload: obteve {r.status_code}", file=sys.stderr)
sys.exit(1)
image_id = r.json()['id']
Isso funciona com uma chave de API “de acesso total”, mas quando tento usar uma granular com o escopo “uploads: create”, recebo um erro 403 ao fazer post para /uploads/generate-presigned-put.
Olá @mattdm, atualizei o escopo da chave de API para abranger essas novas ações para nosso fluxo de upload direto e também implantei seu site. Por favor, me avise se você ainda tiver problemas.