Files

37 lines
1.3 KiB
Python
Raw Permalink Normal View History

"""
存储层模块 (storage)
模块: 服务端 / 存储层
输入: 已校验的密文卷目录 + 元数据
输出: 最终存储目录
零知识 + 零合并: 只存卷, 不做任何拼接/合并, 服务端无密钥。
卷目录整体 move 到日期/transfer_id 目录 (transfer_id 唯一, 无同名冲突)。
"""
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_chunks(self, transfer_id: str, chunk_dir: Path, user_id: str) -> Path:
"""卷目录 -> 用户目录/日期/transfer_id (整体 move, 返回目标目录路径)
每用户独立目录 (user_id 已过注册校验: 3-32 位字母数字/下划线, 无路径风险)。
注意: 目标目录不能预创建, 否则 shutil.move 会嵌套成 dst/dst/。
"""
user_dir = self.storage_root / user_id
day_dir = user_dir / datetime.now().strftime("%Y-%m-%d")
final_dir = day_dir / transfer_id
if final_dir.exists():
raise OSError(f"存储目录已存在: {final_dir}")
day_dir.mkdir(parents=True, exist_ok=True)
shutil.move(str(chunk_dir), str(final_dir))
return final_dir