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);
|
}
|
}
|
}
|