أنا أستخدم الكود التالي للتحميل عبر واجهة برمجة التطبيقات (API):
# واسأل 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']
يعمل هذا مع مفتاح واجهة برمجة تطبيقات “كل الوصول”، ولكن عندما أحاول استخدام مفتاح محدد بنطاق “إنشاء التحميلات” (uploads: create)، أحصل على خطأ 403 عند post إلى /uploads/generate-presigned-put.