minio_upload.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from minio import Minio
  2. from minio.error import S3Error
  3. import os
  4. # MinIO 配置
  5. MINIO_SERVER = "192.168.0.25:9000" # 服务器地址(无http前缀)
  6. ACCESS_KEY = "minioadmin" # 默认Access Key
  7. SECRET_KEY = "minioadmin" # 默认Secret Key
  8. BUCKET_NAME = "szxc" # 你的Bucket名称
  9. def upload_to_minio(local_file_path, object_name=None):
  10. """
  11. 上传文件到MinIO
  12. :param local_file_path: 本地文件路径(如 "C:\\data\\test.txt")
  13. :param object_name: 存储在MinIO中的名称(可选,默认使用本地文件名)
  14. """
  15. # 初始化客户端
  16. client = Minio(
  17. MINIO_SERVER,
  18. access_key=ACCESS_KEY,
  19. secret_key=SECRET_KEY,
  20. secure=False # HTTP模式(如果是HTTPS则设为True)
  21. )
  22. try:
  23. # 自动创建Bucket(如果不存在)
  24. if not client.bucket_exists(BUCKET_NAME):
  25. client.make_bucket(BUCKET_NAME)
  26. print(f"[INFO] Bucket '{BUCKET_NAME}' 创建成功")
  27. # 如果未指定object_name,则使用本地文件名
  28. if object_name is None:
  29. object_name = os.path.basename(local_file_path)
  30. # 上传文件
  31. client.fput_object(
  32. BUCKET_NAME,
  33. object_name,
  34. local_file_path
  35. )
  36. print(f"[SUCCESS] 文件 '{local_file_path}' 已上传到 '{BUCKET_NAME}/{object_name}'")
  37. return True
  38. except S3Error as e:
  39. print(f"[ERROR] MinIO操作失败: {e}")
  40. except Exception as e:
  41. print(f"[ERROR] 其他错误: {e}")
  42. return False
  43. def download_from_minio(object_name, local_file_path=None):
  44. """
  45. 从MinIO下载文件
  46. :param object_name: MinIO中的文件名称
  47. :param local_file_path: 本地保存路径(可选,默认使用当前目录下的同名文件)
  48. :return: 下载成功返回True,失败返回False
  49. """
  50. # 初始化客户端
  51. client = Minio(
  52. MINIO_SERVER,
  53. access_key=ACCESS_KEY,
  54. secret_key=SECRET_KEY,
  55. secure=False
  56. )
  57. try:
  58. # 检查Bucket是否存在
  59. if not client.bucket_exists(BUCKET_NAME):
  60. print(f"[ERROR] Bucket '{BUCKET_NAME}' 不存在")
  61. return False
  62. # 如果未指定本地保存路径,则使用当前目录下的同名文件
  63. if local_file_path is None:
  64. local_file_path = os.path.join(os.getcwd(), object_name)
  65. # 确保目标目录存在
  66. os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
  67. # 下载文件
  68. client.fget_object(
  69. BUCKET_NAME,
  70. object_name,
  71. local_file_path
  72. )
  73. print(f"[SUCCESS] 文件 '{BUCKET_NAME}/{object_name}' 已下载到 '{local_file_path}'")
  74. return True
  75. except S3Error as e:
  76. print(f"[ERROR] MinIO操作失败: {e}")
  77. except Exception as e:
  78. print(f"[ERROR] 其他错误: {e}")
  79. return False
  80. # 示例用法
  81. if __name__ == "__main__":
  82. # # 上传文件示例
  83. # local_file = r"D:\work\codemyself\dify\output.pdf" # 使用原始字符串避免转义问题
  84. # upload_to_minio(local_file) # 使用默认object_name
  85. # 下载文件示例
  86. object_name = "output.pdf" # MinIO中的文件名
  87. download_from_minio(object_name) # 下载到当前目录
  88. # 或指定保存路径:download_from_minio(object_name, "path/to/save/file.pdf")