File size: 3,324 Bytes
8bc2fc9
1eb186a
 
 
3079197
 
1eb186a
d0db329
3079197
2d09c38
3079197
1eb186a
 
 
 
 
d0db329
 
22fe41e
1eb186a
 
 
3079197
 
8887e47
1eb186a
d0db329
22fe41e
8bc2fc9
22fe41e
1eb186a
 
 
 
 
028fe40
b837154
028fe40
 
 
 
 
 
 
 
1eb186a
5db8a67
1eb186a
 
 
 
d0db329
1eb186a
 
d0db329
1eb186a
22fe41e
8bc2fc9
1eb186a
 
 
3079197
 
 
22fe41e
8bc2fc9
3079197
1eb186a
14174de
1eb186a
 
 
22fe41e
8bc2fc9
1eb186a
 
d0db329
cdd9565
3079197
 
 
 
22fe41e
8bc2fc9
3079197
 
 
cdd9565
 
 
 
22fe41e
8bc2fc9
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
105
106
107
108
109
110
111
112
113
import logging
import time
from minio import Minio
from io import BytesIO
from rag import settings
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:
            pass

        try:
            self.conn = Minio(settings.MINIO["host"],
                              access_key=settings.MINIO["user"],
                              secret_key=settings.MINIO["password"],
                              secure=False
                              )
        except Exception:
            logging.exception(
                "Fail to connect %s " % settings.MINIO["host"])

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

    def health(self):
        bucket, fnm, binary = "txtxtxtxt1", "txtxtxtxt1", b"_t@@@1"
        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

    def put(self, bucket, fnm, binary):
        for _ in range(3):
            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:
                logging.exception(f"Fail put {bucket}/{fnm}:")
                self.__open__()
                time.sleep(1)

    def rm(self, bucket, fnm):
        try:
            self.conn.remove_object(bucket, fnm)
        except Exception:
            logging.exception(f"Fail put {bucket}/{fnm}:")

    def get(self, bucket, fnm):
        for _ in range(1):
            try:
                r = self.conn.get_object(bucket, fnm)
                return r.read()
            except Exception:
                logging.exception(f"Fail put {bucket}/{fnm}:")
                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:
            logging.exception(f"Fail put {bucket}/{fnm}:")
        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:
                logging.exception(f"Fail put {bucket}/{fnm}:")
                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")