uploads.py
Ricky/Cat Project Final/back_web-4/app/routes/uploads.py
import os
from flask import Blueprint, current_app, send_from_directory, abort
def _send_upload_file(filename: str):
upload_dir = current_app.config.get("UPLOAD_DIR", "./uploads")
if ".." in filename or filename.startswith("/"):
abort(400)
if not os.path.exists(os.path.join(upload_dir, filename)):
abort(404)
return send_from_directory(upload_dir, filename)
# /uploads/... — keep for backwards compatibility and direct nginx rules
bp = Blueprint("uploads", __name__, url_prefix="/uploads")
@bp.get("/<path:filename>")
def get_upload(filename: str):
return _send_upload_file(filename)
# /api/uploads/... — same files; works when only /api/ is proxied to Flask (common)
bp_api = Blueprint("uploads_api", __name__, url_prefix="/api/uploads")
@bp_api.get("/<path:filename>")
def get_upload_via_api(filename: str):
return _send_upload_file(filename)
Related articles
__init__.py
__init__.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/__init__.py).
Read article →auth.py
auth.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/admin/auth.py).
Read article →routes.py
routes.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/admin/routes.py).
Read article →config.py
config.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/config.py).
Read article →admin_ingest.py
admin_ingest.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/routes/admin_ingest.py).
Read article →admin_stats.py
admin_stats.py — python source code from the Ricky learning materials (Ricky/Cat Project Final/back_web-4/app/routes/admin_stats.py).
Read article →