"""上传相关 Schema""" from apiflask.fields import String, File, Integer, Dict as DictField, Enum from iti.applications.common.enums.sys import StorageTypeEnum from iti.applications.common.utils import BaseSchema class UploadIn(BaseSchema): """文件直接上传输入""" file = File(required=True) directory_id = String(required=False, load_default=None, data_key="directoryId") storage_type = Enum(StorageTypeEnum, required=False, load_default=None, data_key="storageType") class ChunkUploadInitIn(BaseSchema): """分片上传初始化输入""" filename = String(required=True, metadata={"description": "文件名"}) file_size = Integer(required=True, metadata={"description": "文件总大小(字节)"}) file_hash = String( required=False, load_default=None, metadata={"description": "文件MD5哈希(用于秒传)"}, ) chunk_size = Integer( required=False, load_default=2097152, metadata={"description": "分片大小(字节),默认2MB"}, ) total_chunks = Integer( required=False, load_default=None, metadata={"description": "总分片数"} ) directory_id = String( required=False, load_default=None, metadata={"description": "目录ID"} ) storage_type = Enum( StorageTypeEnum, required=False, load_default=None, metadata={"description": "存储类型"}, ) metadata = DictField( required=False, load_default=dict, metadata={"description": "扩展元数据"} ) class ChunkUploadIn(BaseSchema): """分片上传输入""" upload_id = String(required=True, metadata={"description": "上传任务ID"}) chunk_index = Integer( required=True, metadata={"description": "分片索引(从0开始)"} ) chunk_hash = String( required=False, load_default=None, metadata={"description": "分片MD5哈希(用于校验)"}, ) file = File(required=True, metadata={"description": "分片数据"}) class ChunkUploadMergeIn(BaseSchema): """分片合并输入""" upload_id = String(required=True, metadata={"description": "上传任务ID"}) file_hash = String( required=False, load_default=None, metadata={"description": "文件MD5哈希(用于最终校验)"}, )