feat(storage): 统一二进制对象存储与公开错误
新增 Aliyun OSS 与 S3 协议、通道内重试和按优先级跨通道切换,保留 server-main 兼容与环境 OSS 内存通道。 将请求及结果中的 Base64、Data URI、Buffer、multipart 和内联二进制统一对象化,生产路径不再写入本机静态目录,历史本地资源仅保留只读兼容。 引入 PublicErrorV1 并统一 API、异步查询、兼容协议和失败回调的安全错误输出,同时补充迁移、管理端、指标、OpenAPI 与本地模拟验收。 验证:go test ./... -count=1;go vet ./...;pnpm lint;pnpm test;pnpm build;pnpm openapi;tests/ci/migrations-test.sh。
This commit is contained in:
@@ -1039,7 +1039,7 @@ export interface FileStorageChannel {
|
||||
id: string;
|
||||
channelKey: string;
|
||||
name: string;
|
||||
provider: 'server_main_openapi' | 'aliyun_oss' | 'tencent_cos' | string;
|
||||
provider: 'server_main_openapi' | 'aliyun_oss' | 's3' | string;
|
||||
uploadUrl?: string;
|
||||
credentialsPreview?: Record<string, unknown>;
|
||||
scenes?: string[];
|
||||
@@ -1057,9 +1057,14 @@ export interface FileStorageChannel {
|
||||
export interface FileStorageChannelUpsertRequest {
|
||||
channelKey: string;
|
||||
name: string;
|
||||
provider?: 'server_main_openapi' | 'aliyun_oss' | 'tencent_cos' | string;
|
||||
provider?: 'server_main_openapi' | 'aliyun_oss' | 's3' | string;
|
||||
uploadUrl?: string;
|
||||
apiKey?: string;
|
||||
accessKey?: string;
|
||||
accessKeyId?: string;
|
||||
accessKeySecret?: string;
|
||||
secretKey?: string;
|
||||
sessionToken?: string;
|
||||
scenes?: string[];
|
||||
config?: Record<string, unknown>;
|
||||
retryPolicy?: Record<string, unknown>;
|
||||
@@ -1067,12 +1072,20 @@ export interface FileStorageChannelUpsertRequest {
|
||||
status?: 'enabled' | 'disabled' | string;
|
||||
}
|
||||
|
||||
export interface FileStorageChannelTestResult {
|
||||
provider: 'aliyun_oss' | 's3' | string;
|
||||
putSucceeded: boolean;
|
||||
headSucceeded: boolean;
|
||||
deleteSucceeded: boolean;
|
||||
durationMs: number;
|
||||
}
|
||||
|
||||
export interface FileStorageSettings {
|
||||
resultUploadPolicy: 'default' | 'upload_all' | 'upload_none' | string;
|
||||
resultUploadPolicy: 'default' | 'upload_all' | string;
|
||||
}
|
||||
|
||||
export interface FileStorageSettingsUpdateRequest {
|
||||
resultUploadPolicy: 'default' | 'upload_all' | 'upload_none' | string;
|
||||
resultUploadPolicy: 'default' | 'upload_all' | string;
|
||||
}
|
||||
|
||||
export interface ClientCustomizationSettings {
|
||||
@@ -1238,6 +1251,19 @@ export interface IdentityRevisionPolicyUpdate {
|
||||
sessionRefreshSeconds?: number;
|
||||
}
|
||||
|
||||
export interface PublicErrorV1 {
|
||||
code: string;
|
||||
message: string;
|
||||
category: string;
|
||||
httpStatus: number;
|
||||
retryable: boolean;
|
||||
action: string;
|
||||
retryAfterSeconds?: number;
|
||||
requestId?: string;
|
||||
taskId?: string;
|
||||
version: 'v1' | string;
|
||||
}
|
||||
|
||||
export interface GatewayTask {
|
||||
id: string;
|
||||
kind: string;
|
||||
@@ -1284,6 +1310,7 @@ export interface GatewayTask {
|
||||
error?: string;
|
||||
errorCode?: string;
|
||||
errorMessage?: string;
|
||||
publicError?: PublicErrorV1;
|
||||
attempts?: GatewayTaskAttempt[];
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
@@ -1367,6 +1394,7 @@ export interface GatewayTaskAttempt {
|
||||
upstreamSubmissionUpdatedAt?: string;
|
||||
errorCode?: string;
|
||||
errorMessage?: string;
|
||||
publicError?: PublicErrorV1;
|
||||
startedAt: string;
|
||||
finishedAt?: string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user