Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

minio_conn.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import os
  2. import time
  3. from minio import Minio
  4. from io import BytesIO
  5. from rag import settings
  6. from rag.settings import minio_logger
  7. from rag.utils import singleton
  8. @singleton
  9. class RAGFlowMinio(object):
  10. def __init__(self):
  11. self.conn = None
  12. self.__open__()
  13. def __open__(self):
  14. try:
  15. if self.conn:
  16. self.__close__()
  17. except Exception as e:
  18. pass
  19. try:
  20. self.conn = Minio(settings.MINIO["host"],
  21. access_key=settings.MINIO["user"],
  22. secret_key=settings.MINIO["password"],
  23. secure=False
  24. )
  25. except Exception as e:
  26. minio_logger.error(
  27. "Fail to connect %s " % settings.MINIO["host"] + str(e))
  28. def __close__(self):
  29. del self.conn
  30. self.conn = None
  31. def health(self):
  32. bucket, fnm, binary = "txtxtxtxt1", "txtxtxtxt1", b"_t@@@1"
  33. if not self.conn.bucket_exists(bucket):
  34. self.conn.make_bucket(bucket)
  35. r = self.conn.put_object(bucket, fnm,
  36. BytesIO(binary),
  37. len(binary)
  38. )
  39. return r
  40. def put(self, bucket, fnm, binary):
  41. for _ in range(3):
  42. try:
  43. if not self.conn.bucket_exists(bucket):
  44. self.conn.make_bucket(bucket)
  45. r = self.conn.put_object(bucket, fnm,
  46. BytesIO(binary),
  47. len(binary)
  48. )
  49. return r
  50. except Exception as e:
  51. minio_logger.error(f"Fail put {bucket}/{fnm}: " + str(e))
  52. self.__open__()
  53. time.sleep(1)
  54. def rm(self, bucket, fnm):
  55. try:
  56. self.conn.remove_object(bucket, fnm)
  57. except Exception as e:
  58. minio_logger.error(f"Fail rm {bucket}/{fnm}: " + str(e))
  59. def get(self, bucket, fnm):
  60. for _ in range(1):
  61. try:
  62. r = self.conn.get_object(bucket, fnm)
  63. return r.read()
  64. except Exception as e:
  65. minio_logger.error(f"fail get {bucket}/{fnm}: " + str(e))
  66. self.__open__()
  67. time.sleep(1)
  68. return
  69. def obj_exist(self, bucket, fnm):
  70. try:
  71. if self.conn.stat_object(bucket, fnm):return True
  72. return False
  73. except Exception as e:
  74. minio_logger.error(f"Fail put {bucket}/{fnm}: " + str(e))
  75. return False
  76. def get_presigned_url(self, bucket, fnm, expires):
  77. for _ in range(10):
  78. try:
  79. return self.conn.get_presigned_url("GET", bucket, fnm, expires)
  80. except Exception as e:
  81. minio_logger.error(f"fail get {bucket}/{fnm}: " + str(e))
  82. self.__open__()
  83. time.sleep(1)
  84. return
  85. MINIO = RAGFlowMinio()
  86. if __name__ == "__main__":
  87. conn = RAGFlowMinio()
  88. fnm = "/opt/home/kevinhu/docgpt/upload/13/11-408.jpg"
  89. from PIL import Image
  90. img = Image.open(fnm)
  91. buff = BytesIO()
  92. img.save(buff, format='JPEG')
  93. print(conn.put("test", "11-408.jpg", buff.getvalue()))
  94. bts = conn.get("test", "11-408.jpg")
  95. img = Image.open(BytesIO(bts))
  96. img.save("test.jpg")