Python Upload CGI

From XPUB & Lens-Based wiki

For a self-contained server with upload capability see examples like Woof.

Simple Upload CGI

If you have a webserver with basic CGI support, this script displays and processes a simple upload form to receive files.

#!/usr/bin/env python

import cgitb; cgitb.enable()
import cgi, os


env = os.environ
method = os.environ.get("REQUEST_METHOD")

print "Content-type:text/html;charset=utf-8"
print
# print "Hello", method
# cgi.print_environ()

UPLOADS = "/var/www/uploads/"

def upload (inputname, upload_dir):
    form = cgi.FieldStorage()
    if not form.has_key(inputname): return
    fileitem = form[inputname]
    if not fileitem.file: return
    fp = os.path.join(upload_dir, fileitem.filename)
    fout = file (fp, 'wb')
    bytes = 0
    while 1:
        chunk = fileitem.file.read(100000)
        if not chunk: break
        bytes += len(chunk)
        fout.write (chunk)
    fout.close()
    return bytes, fileitem.filename

if method == "POST":
    result = upload("thefile", UPLOADS)
    if result:
        bytes, filename = result
        print "{0} bytes written to {1}<br />".format(bytes, filename)
        print "<a href="">upload another</a>"
else:
    print """<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="thefile" /><input type="submit" />
</form>
</body>
</html>
"""