Download app.py from danicor/danitell: direct link, hf CLI and curl.
- Browser
- Download file 2.28 kB
-
https://huggingface.co/spaces/danicor/danitell/resolve/main/app.py
- Command line
-
hf download hf://spaces/danicor/danitell/app.py
-
curl -L -o app.py https://huggingface.co/spaces/danicor/danitell/resolve/main/app.py
2.28 kB
| from fastapi import FastAPI, Request, UploadFile, File | |
| from fastapi.responses import JSONResponse | |
| import os | |
| from datetime import datetime | |
| app = FastAPI() | |
| SAVE_DIR = "files" | |
| os.makedirs(SAVE_DIR, exist_ok=True) | |
| def home(): | |
| """Health check endpoint""" | |
| print("✅ Health check") | |
| return {"status": "running", "service": "Telegram File Storage"} | |
| async def upload(request: Request): | |
| """ | |
| دریافت فایل از تلگرام بات (از طریق Koyeb) | |
| """ | |
| try: | |
| # خواندن محتوای فایل | |
| data = await request.body() | |
| if not data: | |
| return JSONResponse( | |
| {"error": "No file data received"}, | |
| status_code=400 | |
| ) | |
| # گرفتن نام فایل از header | |
| filename = request.headers.get("X-Filename") | |
| if not filename: | |
| filename = f"file_{datetime.now().strftime('%Y%m%d_%H%M%S')}.bin" | |
| size_kb = round(len(data) / 1024, 2) | |
| print(f"📥 File received: {filename} | {size_kb} KB") | |
| # ذخیره فایل | |
| file_path = os.path.join(SAVE_DIR, filename) | |
| with open(file_path, "wb") as f: | |
| f.write(data) | |
| print(f"💾 Saved to: {file_path}") | |
| return { | |
| "status": "success", | |
| "saved": filename, | |
| "size_kb": size_kb, | |
| "path": file_path | |
| } | |
| except Exception as e: | |
| print(f"❌ Error: {e}") | |
| return JSONResponse( | |
| {"error": str(e)}, | |
| status_code=500 | |
| ) | |
| def list_files(): | |
| """لیست فایلهای ذخیره شده""" | |
| try: | |
| files = os.listdir(SAVE_DIR) | |
| file_info = [] | |
| for f in files: | |
| path = os.path.join(SAVE_DIR, f) | |
| size = os.path.getsize(path) | |
| file_info.append({ | |
| "name": f, | |
| "size_kb": round(size / 1024, 2) | |
| }) | |
| return { | |
| "total": len(files), | |
| "files": file_info | |
| } | |
| except Exception as e: | |
| return {"error": str(e)} | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |