|
@@ -0,0 +1,126 @@
|
|
|
+from minio import Minio
|
|
|
+from minio.error import S3Error
|
|
|
+import json
|
|
|
+import io
|
|
|
+
|
|
|
+class MinIO_globalCfg:
|
|
|
+ endpoint = "1.94.225.168:6614"
|
|
|
+ access_key = "dongri"
|
|
|
+ secret_key = "12345678"
|
|
|
+ bucket_name = "dongri"
|
|
|
+ secure = False
|
|
|
+
|
|
|
+
|
|
|
+class MinIOConfigManager:
|
|
|
+ def __init__(self, endpoint, access_key, secret_key, bucket_name="config-bucket"):
|
|
|
+ self.client = Minio(
|
|
|
+ endpoint,
|
|
|
+ access_key=access_key,
|
|
|
+ secret_key=secret_key,
|
|
|
+ secure=False # 根据实际环境调整 HTTPS
|
|
|
+ )
|
|
|
+ self.bucket_name = bucket_name
|
|
|
+ self._ensure_bucket_exists()
|
|
|
+
|
|
|
+ def _ensure_bucket_exists(self):
|
|
|
+ """确保存储桶存在"""
|
|
|
+ try:
|
|
|
+ if not self.client.bucket_exists(self.bucket_name):
|
|
|
+ self.client.make_bucket(self.bucket_name)
|
|
|
+ except S3Error as e:
|
|
|
+ raise Exception(f"Bucket operation failed: {e}")
|
|
|
+
|
|
|
+ def set_config(self, key, value):
|
|
|
+ try:
|
|
|
+ # 显式展示 value 的处理流程
|
|
|
+ data_bytes = json.dumps(value).encode('utf-8') # 转为字节
|
|
|
+
|
|
|
+ # 创建文件流对象
|
|
|
+ stream = io.BytesIO(data_bytes)
|
|
|
+ stream.seek(0) # 重置指针位置[6](@ref)
|
|
|
+
|
|
|
+ # 上传到 MinIO(value_bytes 即处理后的 value)
|
|
|
+ self.client.put_object(
|
|
|
+ bucket_name=self.bucket_name,
|
|
|
+ object_name=key,
|
|
|
+ data=stream, # 最终使用 value
|
|
|
+ length=len(data_bytes)
|
|
|
+ )
|
|
|
+ print(f"Config '{key}' saved.")
|
|
|
+ except Exception as e:
|
|
|
+ print(f"Error: {e}")
|
|
|
+
|
|
|
+ def get_config(self, key):
|
|
|
+ try:
|
|
|
+ response = self.client.get_object(self.bucket_name, key)
|
|
|
+ data = response.read().decode('utf-8') # 正确调用 read() 方法
|
|
|
+ return data
|
|
|
+ except S3Error as e:
|
|
|
+ if e.code == "NoSuchKey":
|
|
|
+ print(f"Config '{key}' not found.")
|
|
|
+ return None
|
|
|
+ print(f"Error fetching config: {e}")
|
|
|
+ return None
|
|
|
+ finally:
|
|
|
+ if 'response' in locals():
|
|
|
+ response.close()
|
|
|
+
|
|
|
+ def list_configs(self):
|
|
|
+ """列出所有配置键"""
|
|
|
+ try:
|
|
|
+ objects = self.client.list_objects(self.bucket_name)
|
|
|
+ return [obj.object_name for obj in objects]
|
|
|
+ except S3Error as e:
|
|
|
+ print(f"Error listing configs: {e}")
|
|
|
+ return []
|
|
|
+
|
|
|
+ def delete_config(self, key):
|
|
|
+ """删除配置"""
|
|
|
+ try:
|
|
|
+ self.client.remove_object(self.bucket_name, key)
|
|
|
+ print(f"Config '{key}' deleted.")
|
|
|
+ except S3Error as e:
|
|
|
+ print(f"Error deleting config: {e}")
|
|
|
+
|
|
|
+def testMinIO():
|
|
|
+ client = Minio("1.94.225.168:6614", access_key="dongri", secret_key="12345678", secure=False)
|
|
|
+ # 创建桶并上传文件
|
|
|
+ value = {"key": "value"} # 可以是任意数据
|
|
|
+ data_bytes = json.dumps(value).encode('utf-8') # 转为字节
|
|
|
+
|
|
|
+ # 创建文件流对象
|
|
|
+ stream = io.BytesIO(data_bytes)
|
|
|
+ stream.seek(0) # 重置指针位置[6](@ref)
|
|
|
+ client.put_object(
|
|
|
+ bucket_name="test-bucket",
|
|
|
+ object_name="tesss111112st",
|
|
|
+ data=stream,
|
|
|
+ length=len(data_bytes),
|
|
|
+ )
|
|
|
+ print("功能验证成功")
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ #testMinIO()
|
|
|
+
|
|
|
+ # 初始化客户端(替换为你的 MinIO 地址和密钥)
|
|
|
+ config_manager = MinIOConfigManager(
|
|
|
+ endpoint=MinIO_globalCfg.endpoint,
|
|
|
+ access_key=MinIO_globalCfg.access_key,
|
|
|
+ secret_key=MinIO_globalCfg.secret_key,
|
|
|
+ bucket_name=MinIO_globalCfg.bucket_name
|
|
|
+ )
|
|
|
+
|
|
|
+ # 设置配置
|
|
|
+ config_manager.set_config("database", {"host": "127.0.0.1", "port": 3306})
|
|
|
+ config_manager.set_config("app_settings", {"theme": "dark", "timeout": 30})
|
|
|
+
|
|
|
+ # 获取配置
|
|
|
+ db_config = config_manager.get_config("database")
|
|
|
+ print("Database config:", db_config) # 输出: {'host': '127.0.0.1', 'port': 3306}
|
|
|
+
|
|
|
+ # 列出所有配置键
|
|
|
+ print("All config keys:", config_manager.list_configs()) # 输出: ['database', 'app_settings']
|
|
|
+
|
|
|
+ # 删除配置
|
|
|
+ config_manager.delete_config("app_settings")
|
|
|
+
|