- 视频上传生成缩略图并提供占位封面和失败原因展示 - 支持 HLS 按需重新封装 MP4,并限制临时文件生命周期与访问权限 - 完善视频、文件 API 文档、搜索、批量删除和单次转码质量参数 - 修复备份恢复与跨后端迁移遗漏缩略图、HLS 清单和分片的问题 - 将备份任务、归档和下载权限按用户隔离 - 增加仅清理当前用户数据的高危存储清空流程和二次文字确认 - 修复 S3 中文文件名元数据及 CLI 数据库连接问题 - 补充备份恢复、用户隔离、媒体资源和转码相关测试
98 lines
1.8 KiB
TypeScript
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
|
|
}
|