Skip to content

Instantly share code, notes, and snippets.

@eggfly
Last active June 4, 2024 11:21
Show Gist options
  • Save eggfly/ab76696b8acb5433bdb1b53d3c2845c3 to your computer and use it in GitHub Desktop.
Save eggfly/ab76696b8acb5433bdb1b53d3c2845c3 to your computer and use it in GitHub Desktop.
A simple HTTP server that can receive file uploads.
from http.server import BaseHTTPRequestHandler, HTTPServer
import cgi
import os
UPLOAD_DIRECTORY = 'uploads'
class FileUploadHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
html = """
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>
"""
self.wfile.write(html.encode('utf-8'))
def do_POST(self):
content_type, params = cgi.parse_header(self.headers.get('Content-Type'))
if content_type == 'multipart/form-data':
post_data = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD': 'POST'}
)
file_item = post_data['file']
filename = os.path.join(UPLOAD_DIRECTORY, file_item.filename)
with open(filename, 'wb') as f:
f.write(file_item.file.read())
self.send_response(200)
self.end_headers()
self.wfile.write(b'File uploaded successfully!')
def run(server_class=HTTPServer, handler_class=FileUploadHandler, port=8000):
os.makedirs(UPLOAD_DIRECTORY, exist_ok=True)
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print(f'Starting server on port {port}...')
httpd.serve_forever()
if __name__ == '__main__':
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment