forked from AlexNik/MinIO-tutorial
-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
70 lines (52 loc) · 1.98 KB
/
server.py
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
import http.server
import socketserver
import os
from minio import Minio
PORT = 8080
remote_url = os.getenv('REMOTE_URL')
minio_host = os.getenv('MINIO_HOST')
minio_port = os.getenv('MINIO_PORT')
minio_url = f'{minio_host}:{minio_port}'
minio_user = os.getenv('MINIO_USER')
minio_password = os.getenv('MINIO_PASSWORD')
bucket_name = 'uploads'
client = Minio(
minio_url,
access_key=minio_user,
secret_key=minio_password,
secure=False
)
if not client.bucket_exists(bucket_name):
client.make_bucket(bucket_name)
class Handler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
if '/presignedUrl' in self.path:
self.send_response(200, 'OK')
self.send_header('Content-type', 'text/html')
self.end_headers()
filename = self.path.split('=')[1]
original_minio_str = client.presigned_put_object(bucket_name, filename)
fixed_minio_str = original_minio_str.replace(minio_url, remote_url)
self.wfile.write(str.encode(fixed_minio_str))
return
elif '/files' in self.path:
self.send_response(200, 'OK')
self.send_header('Content-type', 'text/html')
self.end_headers()
files = list(client.list_objects(bucket_name, recursive=True))
files_str = '<br>'.join(
[f'<p>{file.object_name}   {client.stat_object(bucket_name, file.object_name).metadata}</p>' for
file in files])
self.wfile.write(str.encode(files_str))
return
else:
with open('index.html', 'r') as web_page_file:
web_page = web_page_file.read()
self.send_response(200, 'OK')
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(str.encode(web_page))
return
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()