docsift-backend-host/docsift-api
0
1import os 2import aioboto33from dotenv import load_dotenv4 5# تحميل متغيرات البيئة6load_dotenv()7 8# إعداد الـ Session والـ Client بطريقة Async9# هاد الطريقة كتخلينا نفتحو Session وحدة ونخدمو بها فـ كاع الـ Requests10session = aioboto3.Session()11 12BUCKET_NAME = os.environ.get("R2_BUCKET_NAME")13ENDPOINT_URL = os.environ.get("R2_ENDPOINT_URL")14ACCESS_KEY = os.environ.get("R2_ACCESS_KEY")15SECRET_KEY = os.environ.get("R2_SECRET_KEY")16R2_PUBLIC_URL = os.environ.get("R2_PUBLIC_URL")17 18async def upload_file_to_r2(file_content, file_name):19 """رفع الملف لـ Cloudflare R2 بطريقة غير متزامنة تماماً"""20 try:21 async with session.client(22 "s3",23 endpoint_url=ENDPOINT_URL,24 aws_access_key_id=ACCESS_KEY,25 aws_secret_access_key=SECRET_KEY,26 region_name="auto"27 ) as s3:28 # الرفع باستخدام put_object الـ Async29 await s3.put_object(30 Bucket=BUCKET_NAME,31 Key=file_name,32 Body=file_content,33 ContentType="application/pdf" # تقدر تردها Dynamic على حسب نوع الملف34 )35 print(f"✅ R2: {file_name} uploaded successfully (Async)")36 return True37 except Exception as e:38 print(f"❌ R2 UPLOAD ERROR: {e}")39 return False40 41async def delete_from_r2(file_name):42 """مسح الملف من R2 بطريقة Async"""43 try:44 async with session.client(45 "s3",46 endpoint_url=ENDPOINT_URL,47 aws_access_key_id=ACCESS_KEY,48 aws_secret_access_key=SECRET_KEY,49 ) as s3:50 await s3.delete_object(Bucket=BUCKET_NAME, Key=file_name)51 print(f"✅ R2: {file_name} deleted successfully")52 return True53 except Exception as e:54 print(f"❌ R2 DELETE ERROR: {e}")55 return False