diff --git a/CHANGELOG.md b/CHANGELOG.md index fdb516e..2ce5697 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 开发快照(云对象存储寻址兼容) + +### Fixed + +- 整库发布与恢复按存储提供方选择寻址方式:MinIO 保留路径式,OSS/S3 使用虚拟主机式,不再因强制路径式而被 OSS 拒绝资源上传。 + ## 开发快照(跨库分块序列分配) ### Fixed diff --git a/internal/librarystack/stack.go b/internal/librarystack/stack.go index f20abe5..0ea3788 100644 --- a/internal/librarystack/stack.go +++ b/internal/librarystack/stack.go @@ -83,7 +83,7 @@ func scopeConfigOf(config appconfig.Config, scope string) (scopeConfig, error) { Region: config.LibraryProductionS3Region, Bucket: config.LibraryProductionS3Bucket, AccessKeyID: config.LibraryProductionS3AccessKey, SecretAccessKey: config.LibraryProductionS3SecretKey, Secure: strings.HasPrefix(config.LibraryProductionS3Endpoint, "https://"), - ForcePathStyle: true, MaxObjectBytes: 256 * 1024 * 1024, + ForcePathStyle: config.LibraryProductionS3Provider == "minio", MaxObjectBytes: 256 * 1024 * 1024, }, }, nil } diff --git a/internal/librarystack/stack_test.go b/internal/librarystack/stack_test.go new file mode 100644 index 0000000..a19c982 --- /dev/null +++ b/internal/librarystack/stack_test.go @@ -0,0 +1,21 @@ +package librarystack + +import ( + "knowledge-governance/internal/appconfig" + "testing" +) + +func TestObjectAddressingMatchesProvider(t *testing.T) { + for _, provider := range []string{"oss", "s3", "minio"} { + t.Run(provider, func(t *testing.T) { + config := appconfig.Config{LibraryProductionDatabaseURL: "configured", LibraryProductionElasticURL: "configured", LibraryProductionTenantID: 1, LibraryProductionInternalKB: "kb-target", LibraryProductionS3Endpoint: "https://storage.example", LibraryProductionS3Bucket: "test-bucket", LibraryProductionS3AccessKey: "fixture", LibraryProductionS3SecretKey: "fixture", LibraryProductionS3Provider: provider} + scope, err := scopeConfigOf(config, "internal") + if err != nil { + t.Fatal(err) + } + if scope.s3.ForcePathStyle != (provider == "minio") { + t.Fatalf("provider %s: ForcePathStyle=%v", provider, scope.s3.ForcePathStyle) + } + }) + } +}