File size: 3,083 Bytes
3079197
1eb186a
 
 
3079197
 
 
1eb186a
d0db329
3079197
2d09c38
3079197
1eb186a
 
 
 
 
d0db329
 
1eb186a
 
 
 
3079197
 
8887e47
1eb186a
d0db329
1eb186a
3079197
 
1eb186a
 
 
 
 
 
 
 
 
 
 
d0db329
1eb186a
 
d0db329
1eb186a
 
3079197
1eb186a
 
 
3079197
 
 
 
 
 
1eb186a
14174de
1eb186a
 
 
 
3079197
1eb186a
 
d0db329
cdd9565
3079197
 
 
 
 
 
 
 
 
cdd9565
 
 
 
 
3079197
cdd9565
 
d0db329
cdd9565
2d09c38
 
 
cdd9565
1eb186a
2d09c38
1eb186a
 
 
 
d0db329
1eb186a
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import os
import time
from minio import Minio
from io import BytesIO
from rag import settings
from rag.settings import minio_logger
from rag.utils import singleton


@singleton
class RAGFlowMinio(object):
    def __init__(self):
        self.conn = None
        self.__open__()

    def __open__(self):
        try:
            if self.conn:
                self.__close__()
        except Exception as e:
            pass

        try:
            self.conn = Minio(settings.MINIO["host"],
                              access_key=settings.MINIO["user"],
                              secret_key=settings.MINIO["password"],
                              secure=False
                              )
        except Exception as e:
            minio_logger.error(
                "Fail to connect %s " % settings.MINIO["host"] + str(e))

    def __close__(self):
        del self.conn
        self.conn = None

    def put(self, bucket, fnm, binary):
        for _ in range(10):
            try:
                if not self.conn.bucket_exists(bucket):
                    self.conn.make_bucket(bucket)

                r = self.conn.put_object(bucket, fnm,
                                         BytesIO(binary),
                                         len(binary)
                                         )
                return r
            except Exception as e:
                minio_logger.error(f"Fail put {bucket}/{fnm}: " + str(e))
                self.__open__()
                time.sleep(1)

    def rm(self, bucket, fnm):
        try:
            self.conn.remove_object(bucket, fnm)
        except Exception as e:
            minio_logger.error(f"Fail rm {bucket}/{fnm}: " + str(e))

    def get(self, bucket, fnm):
        for _ in range(1):
            try:
                r = self.conn.get_object(bucket, fnm)
                return r.read()
            except Exception as e:
                minio_logger.error(f"fail get {bucket}/{fnm}: " + str(e))
                self.__open__()
                time.sleep(1)
        return

    def obj_exist(self, bucket, fnm):
        try:
            if self.conn.stat_object(bucket, fnm):return True
            return False
        except Exception as e:
            minio_logger.error(f"Fail put {bucket}/{fnm}: " + str(e))
        return False


    def get_presigned_url(self, bucket, fnm, expires):
        for _ in range(10):
            try:
                return self.conn.get_presigned_url("GET", bucket, fnm, expires)
            except Exception as e:
                minio_logger.error(f"fail get {bucket}/{fnm}: " + str(e))
                self.__open__()
                time.sleep(1)
        return


MINIO = RAGFlowMinio()


if __name__ == "__main__":
    conn = RAGFlowMinio()
    fnm = "/opt/home/kevinhu/docgpt/upload/13/11-408.jpg"
    from PIL import Image
    img = Image.open(fnm)
    buff = BytesIO()
    img.save(buff, format='JPEG')
    print(conn.put("test", "11-408.jpg", buff.getvalue()))
    bts = conn.get("test", "11-408.jpg")
    img = Image.open(BytesIO(bts))
    img.save("test.jpg")