spmoisa548/cdn-api
0
1import json2import os3from pathlib import Path4from http.server import BaseHTTPRequestHandler, HTTPServer5 6# ĐẶT biến này đúng bằng mount path bạn chọn trong Space Settings7MOUNT_PATH = os.getenv("BUCKET_MOUNT_PATH", "/data")8 9def scan(base: str):10 p = Path(base)11 if not p.exists():12 return {13 "exists": False,14 "path": base,15 "count": 0,16 "files": []17 }18 19 files = []20 for x in sorted(p.rglob("*")):21 if x.is_file():22 st = x.stat()23 files.append({24 "path": str(x.relative_to(p)),25 "size": st.st_size26 })27 28 return {29 "exists": True,30 "path": base,31 "count": len(files),32 "files": files33 }34 35class Handler(BaseHTTPRequestHandler):36 def do_GET(self):37 data = scan(MOUNT_PATH)38 body = json.dumps(data, ensure_ascii=False, indent=2).encode("utf-8")39 40 self.send_response(200)41 self.send_header("Content-Type", "application/json; charset=utf-8")42 self.send_header("Content-Length", str(len(body)))43 self.end_headers()44 self.wfile.write(body)45 46 def log_message(self, fmt, *args):47 print(fmt % args, flush=True)48 49if __name__ == "__main__":50 data = scan(MOUNT_PATH)51 52 print("=== BUCKET_SCAN_START ===", flush=True)53 print(json.dumps(data, ensure_ascii=False, indent=2), flush=True)54 print("=== BUCKET_SCAN_END ===", flush=True)55 56 HTTPServer(("0.0.0.0", 7860), Handler).serve_forever()