26 lines
924 B
Python
26 lines
924 B
Python
|
|
"""
|
||
|
|
File upload API: images and documents, max 10MB.
|
||
|
|
"""
|
||
|
|
import os
|
||
|
|
from flask import Blueprint, request, jsonify, current_app
|
||
|
|
from flask_jwt_extended import jwt_required, get_jwt_identity
|
||
|
|
from app.services.file_service import FileService
|
||
|
|
|
||
|
|
files_bp = Blueprint("files", __name__)
|
||
|
|
|
||
|
|
|
||
|
|
@files_bp.route("/upload", methods=["POST"])
|
||
|
|
@jwt_required()
|
||
|
|
def upload():
|
||
|
|
if "file" not in request.files:
|
||
|
|
return jsonify({"error": "No file part"}), 400
|
||
|
|
file = request.files["file"]
|
||
|
|
subdir = request.form.get("subdir", "uploads")
|
||
|
|
result = FileService.save_upload(file, subdir=subdir)
|
||
|
|
if not result:
|
||
|
|
return jsonify({"error": "Invalid file or exceeds 10MB"}), 400
|
||
|
|
relative_path, _ = result
|
||
|
|
base_url = current_app.config.get("FILE_BASE_URL", "").rstrip("/")
|
||
|
|
url = f"{base_url}/{relative_path}" if base_url else f"/files/{relative_path}"
|
||
|
|
return jsonify({"url": url, "path": relative_path}), 201
|