mirror of https://github.com/kurisufriend/box
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
924 B
35 lines
924 B
import socket
|
|
from PIL import Image
|
|
from io import BytesIO
|
|
from hashlib import sha256
|
|
from threading import Thread
|
|
|
|
_PORT = 1337
|
|
|
|
def handle_conn(conn):
|
|
conn.sendall("hai~".encode("ascii"))
|
|
data = b""
|
|
while True:
|
|
part = conn.recv(4096)
|
|
if not part:
|
|
break
|
|
data += part
|
|
try:
|
|
img = Image.open(BytesIO(data))
|
|
except OSError:
|
|
conn.sendall("cannot parse image".encode("ascii"))
|
|
return
|
|
no_exif = Image.new(img.mode, img.size)# abandon metadata
|
|
no_exif.putdata(list(img.getdata()))
|
|
filename = f"store/{sha256(no_exif.tobytes()).hexdigest()}.{img.format.lower()}"
|
|
no_exif.save(filename)
|
|
conn.sendall(f"saved to {filename}".encode("ascii"))
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
s.bind(("0.0.0.0", _PORT))
|
|
|
|
s.listen()
|
|
|
|
while True:
|
|
conn, conn_addr = s.accept()
|
|
Thread(target=handle_conn, args=(conn,)).start()
|
|
|