import argparse import BaseHTTPServer import os import SimpleHTTPServer import cgi, logging from daemonize import Daemonize class SimpleHTTPRequestHandlerWithPOST(SimpleHTTPServer.SimpleHTTPRequestHandler): UPLOAD_PATH = "upload" """ Accept all post request as file upload """ def do_POST(self): path = os.path.join(self.UPLOAD_PATH, os.path.basename(self.path)) length = self.headers['content-length'] data = self.rfile.read(int(length)) with open(path, 'wb') as fh: fh.write(data) self.send_response(200) self.send_header('Content-Type', 'application/json') self.end_headers() # Return the absolute path of the uploaded file self.wfile.write('{"url":"/%s"}' % path) def setup(): parser = argparse.ArgumentParser() parser.add_argument("directory") parser.add_argument("-p", "--port", dest="port", type=int, default=8080) parser.add_argument('-P', "--pid-file", dest="pid", default="web.pid") args = parser.parse_args() # Get absolute path to directory to serve, as daemonize changes to '/' os.chdir(args.directory) dr = os.getcwd() httpd = BaseHTTPServer.HTTPServer( ('', args.port), SimpleHTTPRequestHandlerWithPOST ) def run(): os.chdir(dr) httpd.serve_forever() daemon = Daemonize( app="synapse-webclient", pid=args.pid, action=run, auto_close_fds=False, ) daemon.start() if __name__ == '__main__': setup()