import os import base64 from http.server import SimpleHTTPRequestHandler, HTTPServer, ThreadingHTTPServer import cgi from mimetypes import guess_type import datetime import uuid UPLOAD_DIR = 'uploads' PORT = 8000 class CustomHTTPRequestHandler(SimpleHTTPRequestHandler): def do_OPTIONS(self): """ Preflight request. Reply successfully: """ self.send_response(200, "ok") self.send_header('Access-Control-Allow-Origin', '*') self.send_header('Access-Control-Allow-Methods', 'POST') self.send_header('Access-Control-Allow-Headers', 'tag') self.end_headers() def do_POST(self): # 解析表单数据 form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={ 'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': self.headers['Content-Type'], } ) # 获取图片和标签 file_item = form['file'] if 'file' in form else None tag = self.headers.get('tag') if file_item.filename and tag: # 获取文件的MIME类型 mime_type, _ = guess_type(file_item.filename) # 将图片转换为Base64 image_data = file_item.file.read() base64_encoded = base64.b64encode(image_data).decode('utf-8') # 替换加密规则 encrypted_content = base64_encoded.replace('A', '^^').replace('H', '##').replace('J', '$$').replace('=', '**') # 添加Data URI格式 encrypted_content = f"data:{mime_type};base64,{encrypted_content}" # 根据标签生成文件夹名,并检查是否需要创建 tag_folder = os.path.join(UPLOAD_DIR, tag) if not os.path.exists(tag_folder): os.makedirs(tag_folder) # 获取上传文件的后缀名 file_extension = os.path.splitext(file_item.filename)[1] # 生成文件名:上传的时间 + 随机字符串 + 上传的文件后缀 current_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S') random_string = uuid.uuid4().hex[:16] # 获取6位的随机字符串 filename = os.path.join(tag_folder, f"{current_time}_{random_string}{file_extension}") # 写入加密后的Base64字符串到文件 with open(filename, 'w') as f: f.write(encrypted_content) self.send_response(200) self.send_header('Access-Control-Allow-Origin', '*') self.send_header('Access-Control-Allow-Methods', 'POST') self.send_header('Access-Control-Allow-Headers', 'tag') self.end_headers() self.wfile.write(f"/resource/{filename}".encode('utf-8')) else: self.send_response(400) self.send_header('Access-Control-Allow-Origin', '*') self.send_header('Access-Control-Allow-Methods', 'POST') self.send_header('Access-Control-Allow-Headers', 'tag') self.end_headers() self.wfile.write(b'Missing image or tag!') if __name__ == '__main__': with ThreadingHTTPServer(('0.0.0.0', PORT), CustomHTTPRequestHandler) as server: print(f"Server started at port {PORT}") server.serve_forever()