Skip to content

Instantly share code, notes, and snippets.

@KevCui
Created July 12, 2020 09:15
Show Gist options
  • Save KevCui/60bc39ff765804603bbb78adb66c2afd to your computer and use it in GitHub Desktop.
Save KevCui/60bc39ff765804603bbb78adb66c2afd to your computer and use it in GitHub Desktop.
Simple Python File Upload Server
#!/usr/bin/env python3
# ./simpleuploder.py [<port>]
import socketserver
import http.server
import cgi
import os
from sys import argv
class ServerHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
http.server.SimpleHTTPRequestHandler.do_GET(self)
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': self.headers['Content-Type'],
})
fileitem = form['filename']
if fileitem.filename:
fn = os.path.basename(fileitem.filename)
open(fn, 'wb').write(fileitem.file.read())
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(b"<html>done!</html>")
def run(handler=ServerHandler, port=8000):
socketserver.TCPServer.allow_reuse_address = True
httpd = socketserver.TCPServer(("", port), handler)
print("serving at port", port)
httpd.serve_forever()
def createIndexFile():
f = open('index.html', 'w')
f.write(" <html> <body> <form enctype = multipart/form-data action = upload.py method = post> <p>Upload File: <input type = file name = filename /></p> <p><input type = submit value = Upload /></p> </form> </body> </html>")
f.close()
def removeIndexFile():
os.remove('index.html')
if __name__ == "__main__":
createIndexFile()
try:
if len(argv) == 2:
run(port=int(argv[1]))
else:
run()
except KeyboardInterrupt:
removeIndexFile()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment