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:
2026-08-04 08:14:39 +08:00
parent d129bcccbd
commit 0f0998cbcf
55 changed files with 3649 additions and 1008 deletions
@@ -0,0 +1,21 @@
ALTER TABLE gateway_request_assets
ADD COLUMN IF NOT EXISTS storage_channel_id uuid REFERENCES file_storage_channels(id) ON DELETE SET NULL,
ADD COLUMN IF NOT EXISTS storage_channel_key text,
ADD COLUMN IF NOT EXISTS object_key text,
ADD COLUMN IF NOT EXISTS access_scope text DEFAULT 'private';
ALTER TABLE gateway_tasks
ADD COLUMN IF NOT EXISTS public_error jsonb;
ALTER TABLE gateway_task_attempts
ADD COLUMN IF NOT EXISTS public_error jsonb;
CREATE INDEX IF NOT EXISTS idx_gateway_request_assets_object
ON gateway_request_assets(storage_channel_key, object_key)
WHERE object_key IS NOT NULL;
UPDATE system_settings
SET value = jsonb_set(COALESCE(value, '{}'::jsonb), '{resultUploadPolicy}', '"default"'::jsonb, true),
updated_at = now()
WHERE setting_key = 'file_storage'
AND COALESCE(value->>'resultUploadPolicy', '') IN ('upload_none', 'none', 'never', 'disabled', 'no_upload', 'skip', 'skip_all');