Files
xiaoxia-saas/apps/api/app/schemas/upload.py
xiaoxia 665228a58f
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 56s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m49s
CI/CD Pipeline / Build Staging API Image (push) Successful in 3m36s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 3m37s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 6m21s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 6m20s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m10s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 54s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1m49s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 10m53s
CI/CD Pipeline / Staging API Integration Tests (push) Failing after 3m38s
CI/CD Pipeline / Unit Tests (push) Failing after 14m29s
CI/CD Pipeline / Integration Tests (push) Failing after 7m28s
CI/CD Pipeline / CI Gate (push) Failing after 646h44m57s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 646h48m46s
CI/CD Pipeline / Build Production Web Image (push) Failing after 646h48m46s
CI/CD Pipeline / Production Browser E2E (push) Failing after 646h48m43s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 647h3m11s
CI/CD Pipeline / Canary Release to Production (push) Failing after 646h48m44s
CI/CD Pipeline / PR Build Web Image (push) Failing after 647h3m13s
CI/CD Pipeline / Frontend Lint (push) Failing after 647h3m16s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 647h3m19s
CI/CD Pipeline / Deploy Production (push) Failing after 647h22m30s
CI/CD Pipeline / Build Production API Image (push) Failing after 647h22m32s
CI/CD Pipeline / PR Build API Image (push) Failing after 647h37m1s
refactor: 删除 uploadAsset,统一使用 uploadAssetDirect 直传
前端:
- 删除 uploadAsset 函数(upload.ts)和 export(index.ts)
- 删除 UploadResult type export
- CloneModal/useCloneSubmit 改用 uploadAssetDirect
- DirectUploadCompleteResult 新增 url 字段
- 清理测试文件中 uploadAsset 引用

后端:
- DirectUploadCompleteResponse 新增 url 字段
- complete_direct_upload 返回 OSS 文件 URL
- 修复 FFmpeg 超时日志 300s → 900s
2026-08-20 16:22:56 +08:00

51 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from pydantic import BaseModel, Field
class UploadAssetRequest(BaseModel):
"""素材上传请求(multipart form)"""
project_id: str = Field(..., min_length=1, description="项目 ID")
library_id: str = Field(..., min_length=1, description="素材库 ID")
file_hash: str = Field(default="", max_length=64, description="文件 MD5 哈希,用于去重检测")
class DirectUploadPrepareRequest(BaseModel):
project_id: str = Field(..., min_length=1)
library_id: str = Field(..., min_length=1)
filename: str = Field(..., min_length=1, max_length=255)
content_type: str = Field(default="application/octet-stream", min_length=1, max_length=100)
file_size: int = Field(..., gt=0)
file_hash: str = Field(default="", max_length=64, description="文件 MD5 哈希,用于去重检测")
class DirectUploadPrepareResponse(BaseModel):
upload_url: str
method: str
storage_key: str
expires_at: str
fields: dict[str, str]
max_size_bytes: int
class DirectUploadCompleteRequest(BaseModel):
project_id: str = Field(..., min_length=1)
library_id: str = Field(..., min_length=1)
storage_key: str = Field(..., min_length=1, max_length=255)
file_hash: str = Field(default="", max_length=64, description="文件 MD5 哈希,用于去重检测")
class DirectUploadCompleteResponse(BaseModel):
storage_key: str
ingest_job_id: str
duplicated: bool = Field(default=False, description="是否为重复素材(命中去重)")
asset_id: str = Field(default="", description="重复素材的 asset_id(duplicated=true 时返回)")
url: str = Field(default="", description="Public URL of uploaded file")
class UploadAssetResponse(BaseModel):
storage_key: str
ingest_job_id: str
url: str = Field(..., description="Public URL of uploaded file")
duplicated: bool = Field(default=False, description="是否为重复素材(命中去重)")
asset_id: str = Field(default="", description="重复素材的 asset_id(duplicated=true 时返回)")