Files
static/app/blueprints/upload.py
KWON 7121f250bc feat: Flask 애플리케이션 모듈화 및 웹 대시보드 구현
- Flask Blueprint 아키텍처로 전환 (dashboard, upload, backup, status)
- app.py 681줄  95줄로 축소 (86% 감소)
- HTML 템플릿 모듈화 (base.html + 기능별 templates)
- CSS/JS 파일 분리 (common + 기능별 파일)
- 대시보드 기능 추가 (통계, 주간 예보, 방문객 추이)
- 파일 업로드 웹 인터페이스 구현
- 백업/복구 관리 UI 구현
- Docker 배포 환경 개선
- .gitignore 업데이트 (uploads, backups, cache 등)
2025-12-26 17:31:37 +09:00

84 lines
2.1 KiB
Python

# app/blueprints/upload.py
"""
파일 업로드 블루프린트
역할:
- 파일 업로드 처리
- 업로드 UI 제공
"""
from flask import Blueprint, render_template, request, jsonify
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
from app.file_processor import FileProcessor
upload_bp = Blueprint('upload', __name__, url_prefix='/api/upload')
def get_file_processor(upload_folder):
"""파일 프로세서 인스턴스 반환"""
return FileProcessor(upload_folder)
@upload_bp.route('/')
def index():
"""파일 업로드 페이지"""
return render_template('upload.html')
@upload_bp.route('', methods=['POST'])
def upload_files():
"""
파일 업로드 처리
요청:
files: MultiDict[FileStorage] - 업로드된 파일들
응답:
{
'success': bool,
'message': str,
'files': List[dict],
'errors': List[dict]
}
"""
try:
if 'files' not in request.files:
return jsonify({
'success': False,
'message': '업로드된 파일이 없습니다.',
'files': [],
'errors': []
}), 400
uploaded_files = request.files.getlist('files')
if len(uploaded_files) == 0:
return jsonify({
'success': False,
'message': '파일을 선택하세요.',
'files': [],
'errors': []
}), 400
# 업로드 폴더 경로
upload_folder = os.path.join(os.path.dirname(__file__), '..', '..', 'uploads')
os.makedirs(upload_folder, exist_ok=True)
# 파일 처리
file_processor = get_file_processor(upload_folder)
results = file_processor.process_uploads(uploaded_files)
return jsonify(results)
except Exception as e:
return jsonify({
'success': False,
'message': f'업로드 처리 중 오류: {str(e)}',
'files': [],
'errors': [str(e)]
}), 500