# И спрашиваем Discourse, куда отправить файл.
r = requests.post(
f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
print(
f"Ошибка при запросе места для загрузки изображения: получен код {r.status_code}", file=sys.stderr)
sys.exit(1)
upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']
# Теперь загружаем туда, куда нам указали.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
print(
f"Ошибка загрузки изображения во внешнее хранилище: получен код {r.status_code}", file=sys.stderr)
sys.exit(1)
# И сообщаем Discourse, что всё прошло успешно, получая идентификатор, который можно использовать позже.
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"Ошибка завершения загрузки: получен код {r.status_code}", file=sys.stderr)
sys.exit(1)
image_id = r.json()['id']
Это работает с API-ключом «полный доступ», но при попытке использовать ограниченный ключ с областью действия «uploads: create» я получаю ошибку 403 на post к /uploads/generate-presigned-put.
Привет, @mattdm! Я обновил область действия API-ключа, чтобы включить эти новые действия для нашего процесса прямой загрузки, а также развернул ваш сайт. Пожалуйста, дайте знать, если у вас всё ещё возникнут проблемы.