File size: 2,172 Bytes
026d511 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
"""
νμΌ κ΄λ ¨ μ νΈλ¦¬ν° ν¨μ
"""
from pathlib import Path
from typing import Optional
from werkzeug.utils import secure_filename
from app.core.config import Config
from app.core.logger import get_logger
logger = get_logger(__name__)
def allowed_file(filename: str) -> bool:
"""
νμΌ νμ₯μκ° νμ©λ νμ₯μμΈμ§ νμΈ
Args:
filename: νμΌλͺ
Returns:
νμ©λ νμ₯μλ©΄ True, μλλ©΄ False
"""
if '.' not in filename:
return False
extension = filename.rsplit('.', 1)[1].lower()
return extension in Config.ALLOWED_EXTENSIONS
def get_file_extension(filename: str) -> Optional[str]:
"""
νμΌ νμ₯μ μΆμΆ
Args:
filename: νμΌλͺ
Returns:
νμ₯μ (μ μ μΈ), μμΌλ©΄ None
"""
if '.' not in filename:
return None
return filename.rsplit('.', 1)[1].lower()
def ensure_upload_folder() -> Path:
"""
μ
λ‘λ ν΄λκ° μ‘΄μ¬νλμ§ νμΈνκ³ μμΌλ©΄ μμ±
Returns:
μ
λ‘λ ν΄λ κ²½λ‘
Raises:
OSError: ν΄λ μμ± λλ μ°κΈ° κΆν μ€λ₯
"""
upload_folder = Config.UPLOAD_FOLDER
try:
# ν΄λ μμ±
upload_folder.mkdir(parents=True, exist_ok=True)
logger.debug(f"μ
λ‘λ ν΄λ νμΈ μλ£: {upload_folder}")
# μ°κΈ° κΆν ν
μ€νΈ
test_file = upload_folder / '.write_test'
try:
test_file.write_text('test')
test_file.unlink()
logger.debug(f"μ
λ‘λ ν΄λ μ°κΈ° κΆν νμΈ μλ£: {upload_folder}")
except PermissionError as e:
raise OSError(f'μ
λ‘λ ν΄λμ μ°κΈ° κΆνμ΄ μμ΅λλ€: {upload_folder}') from e
except Exception as e:
raise OSError(f'μ
λ‘λ ν΄λ μ°κΈ° ν
μ€νΈ μ€ν¨: {upload_folder}') from e
return upload_folder
except Exception as e:
logger.error(f"μ
λ‘λ ν΄λ μμ± μ€λ₯: {e}", exc_info=True)
raise
|