From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-file/jnpf-file-storage/src/main/java/jnpf/fileStorage/SeaweedFsStorageRegistrar.java |   76 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 76 insertions(+), 0 deletions(-)

diff --git a/jnpf-file/jnpf-file-storage/src/main/java/jnpf/fileStorage/SeaweedFsStorageRegistrar.java b/jnpf-file/jnpf-file-storage/src/main/java/jnpf/fileStorage/SeaweedFsStorageRegistrar.java
new file mode 100644
index 0000000..81990e6
--- /dev/null
+++ b/jnpf-file/jnpf-file-storage/src/main/java/jnpf/fileStorage/SeaweedFsStorageRegistrar.java
@@ -0,0 +1,76 @@
+package jnpf.fileStorage;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.x.file.storage.core.FileStorageService;
+import org.dromara.x.file.storage.core.platform.FileStorage;
+import org.dromara.x.file.storage.core.platform.MinioFileStorage;
+import org.dromara.x.file.storage.core.platform.MinioFileStorageClientFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class SeaweedFsStorageRegistrar {
+    private final SeaweedFsStorageProperties properties;
+    private final FileStorageService fileStorageService;
+    private final List<MinioFileStorage> registeredStorages = new ArrayList<>();
+
+    @PostConstruct
+    void register() {
+        for (SeaweedFsStorageProperties.SeaweedFsConfig config : properties.getSeaweedfs()) {
+            if (!Boolean.TRUE.equals(config.getEnableStorage())) {
+                continue;
+            }
+            validate(config);
+            synchronized (fileStorageService.getFileStorageList()) {
+                ensureUnique(config.getPlatform());
+                MinioFileStorageClientFactory clientFactory = new MinioFileStorageClientFactory(config);
+                MinioFileStorage storage = new MinioFileStorage(config, clientFactory);
+                fileStorageService.getFileStorageList().add(storage);
+                registeredStorages.add(storage);
+            }
+            log.info("SeaweedFS 瀛樺偍骞冲彴宸叉敞鍐�: platform={}, bucket={}",
+                    config.getPlatform(), config.getBucketName());
+        }
+    }
+
+    @PreDestroy
+    void unregister() {
+        for (MinioFileStorage storage : registeredStorages) {
+            fileStorageService.getFileStorageList().remove(storage);
+            storage.close();
+        }
+        registeredStorages.clear();
+    }
+
+    private void ensureUnique(String platform) {
+        for (FileStorage storage : fileStorageService.getFileStorageList()) {
+            if (platform.equals(storage.getPlatform())) {
+                throw new IllegalStateException("鏂囦欢瀛樺偍骞冲彴鏍囪瘑閲嶅: " + platform);
+            }
+        }
+    }
+
+    private void validate(SeaweedFsStorageProperties.SeaweedFsConfig config) {
+        requireText(config.getPlatform(), "platform");
+        if (!config.getPlatform().startsWith("seaweedfs-")) {
+            throw new IllegalStateException("SeaweedFS 骞冲彴鏍囪瘑蹇呴』浠� seaweedfs- 寮�澶�");
+        }
+        requireText(config.getAccessKey(), "access-key");
+        requireText(config.getSecretKey(), "secret-key");
+        requireText(config.getEndPoint(), "end-point");
+        requireText(config.getBucketName(), "bucket-name");
+    }
+
+    private void requireText(String value, String field) {
+        if (value == null || value.trim().isEmpty()) {
+            throw new IllegalStateException("SeaweedFS 閰嶇疆缂哄皯 " + field);
+        }
+    }
+}

--
Gitblit v1.8.0