38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
"""
|
|
存储层模块 (storage)
|
|
模块: 服务端 / 存储层
|
|
输入: 明文流 + 元数据
|
|
输出: 最终文件路径
|
|
|
|
按日期目录落盘, 同名冲突加后缀去重, 流式移动不整块进内存。
|
|
"""
|
|
|
|
import shutil
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
from task_manager import TaskManager
|
|
|
|
|
|
class Storage:
|
|
def __init__(self, tasks: TaskManager, storage_root: str | Path) -> None:
|
|
self.tasks = tasks
|
|
self.storage_root = Path(storage_root)
|
|
|
|
def store(self, plain_path: Path, file_name: str) -> Path:
|
|
"""明文 -> 最终存储路径 (返回路径)"""
|
|
day_dir = self.storage_root / datetime.now().strftime("%Y-%m-%d")
|
|
day_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
# 同名冲突: 加 -1/-2 后缀
|
|
target = day_dir / file_name
|
|
counter = 1
|
|
while target.exists():
|
|
stem, suffix = file_name.rsplit(".", 1) if "." in file_name else (file_name, "")
|
|
name = f"{stem}-{counter}" + (f".{suffix}" if suffix else "")
|
|
target = day_dir / name
|
|
counter += 1
|
|
|
|
shutil.move(str(plain_path), str(target))
|
|
return target
|