Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

minio_conn.py 3.4KB

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