Files
FileHost/app/types/image.ts
T
tianmo a64be50b73 feat: 完善媒体管理与备份迁移流程
- 视频上传生成缩略图并提供占位封面和失败原因展示
- 支持 HLS 按需重新封装 MP4,并限制临时文件生命周期与访问权限
- 完善视频、文件 API 文档、搜索、批量删除和单次转码质量参数
- 修复备份恢复与跨后端迁移遗漏缩略图、HLS 清单和分片的问题
- 将备份任务、归档和下载权限按用户隔离
- 增加仅清理当前用户数据的高危存储清空流程和二次文字确认
- 修复 S3 中文文件名元数据及 CLI 数据库连接问题
- 补充备份恢复、用户隔离、媒体资源和转码相关测试
2026-10-17 13:46:02 +08:00

98 lines
1.8 KiB
TypeScript

export type ErrorCode
= | 'UNAUTHORIZED'
| 'FORBIDDEN'
| 'CONFLICT'
| 'INVALID_REQUEST'
| 'TOO_MANY_FILES'
| 'FILE_TOO_LARGE'
| 'UNSUPPORTED_FILE_TYPE'
| 'INVALID_FILE_SIGNATURE'
| 'INVALID_IMAGE_KEY'
| 'INVALID_VIDEO_KEY'
| 'IMAGE_NOT_FOUND'
| 'HLS_NOT_FOUND'
| 'HLS_REMUX_FAILED'
| 'UPLOAD_FAILED'
| 'DELETE_FAILED'
export interface ApiError {
code: ErrorCode
message: string
}
export interface ApiErrorResponse {
success: false
error: ApiError
}
export interface ImageItem {
key: string
url: string
originalName: string
contentType: string
size: number
uploadedAt: string
markdown: string
html: string
/** 管理员列表可见:上传者信息 */
owner?: {
userId: number | null
username: string
}
/** 图片所在存储后端(统计/管理列表) */
storage?: {
id: string
name: string
type: 'local' | 's3' | 'telegram'
}
/** 上传来源:网页或 API(来自活动日志) */
uploadSource?: 'web' | 'api'
/** 图片标签 */
tags?: ImageTag[]
}
export interface ImageTag {
id: number
name: string
color: string
imageCount?: number
createdAt?: string
lastUsedAt?: string | null
}
export interface UploadErrorItem {
name: string
error: ApiError
}
export interface UploadResponse {
success: boolean
items: ImageItem[]
errors: UploadErrorItem[]
}
export interface ImageListResponse {
items: ImageItem[]
total: number
page: number
pageSize: number
totalPages: number
}
export interface DeleteResponse {
success: boolean
}
export interface BatchDeleteResponse {
success: boolean
deleted: string[]
failed: Array<{ key: string, error: ApiError }>
}
export interface UploadProgressItem {
name: string
status: 'pending' | 'uploading' | 'success' | 'error'
progress: number
error?: string
}