CGI File Upload

Pete Shinners pete at visionart.com
Mon Nov 6 18:44:24 EST 2000


"Simon Faulkner" <news at titanic.co.uk> wrote
> I would like users to be able to upload .jpeg files via a web page
> <input type=file>
>
> What python code do I need to be able to save the file to a directory
> on the hard disk?

i have some code that does this.. you'll probably want to clean
it to suit your own purposes, but here it is. at some point i
wanted to add PIL support to resize the images to a certain
resolution and convert them to be JPG, but that day hasn't come
yet... heh. note it also allows the user to save a comment as a
.TXT file. anyways, you can use it as a start for whatever you want

(hopefully formatting doesn't get destroyed over news...)
(warning, this is one of my very first python scripts, it
may not be 100% kosher, but it has been working well)

two files here, one is most of my cgi script, other is the
page with the form that calls the script...

-----------------------------------------------------------------

import sys,os,cgi,glob,string,time
import members #my membership user list
import header  #cgi script to build my page header
sys.stderr = sys.stdout


# directory for upload; will be created if doesn't exist
dirUpload = "/home/ACCOUNT/public_html/photos"

# where to email upload reports
email = "ACCOUNT at server.com"
# sendmail will email notification of uploads
sendmail = "/usr/sbin/sendmail"




def mailme(msg=""):
    "Quick and dirty, pipe a message to sendmail"
    if email:
        try:
            o = os.popen("%s -t" % sendmail,"w")
            o.write("To: %s\n" % email)
            o.write("From: %s\n" % email)
            o.write("Subject: %s\n" % "Photo Upload")
            o.write("\n")
            o.write("%s\n" % msg)
            o.write("---------------------------------------\n")
            for x in [
'REQUEST_URI','HTTP_USER_AGENT','REMOTE_ADDR','HTTP_FROM'
,'REMOTE_HOST','REMOTE_PORT','SERVER_SOFTWARE','HTTP_REFERER','REMOTE_IDENT'
,'RE
MOTE_USER','QUERY_STRING','DATE_LOCAL' ]:
                if os.environ.has_key(x):
                    o.write("%s: %s\n" % (x, os.environ[x]))
            o.write("---------------------------------------\n")
            o.close()
        except IOError:
            pass


def handleform():
    data = cgi.FieldStorage()
    try:
        members = members.MemberList()
        m = members[data['name'].value]
        account= m['account']
        password = data['pass'].value
        if members.checkpassword(account, password) == 0:
            raise IOError, 'Invalid Password'
    except:
        badinput('Invalid user account or password. Please try again.',
data)
        return

    if not data.has_key('image'):
        return

    try:
        filename = os.path.join(dirUpload, m['name']+'.jpg')
        o = open(filename, 'wb')
        o.write(data['image'].value)
        o.close()

        filename = os.path.join(dirUpload, m['name']+'.txt')
        o = open(filename, 'w')
        o.write(data['comment'].value)
        o.close()
    except:
        badinput('No Image Uploaded', data)

    header.header('Upload Successful', 'account')
    print "<br><font size=+1>Image Uploaded Successfully.</font><br>"
    print "You may return to the <a href=/photos.shtml>Photos</a> page "
    print "to view your new addition.<br>"
    print "You will probably need to <u>Reload</u> the Photos Page once "
    print "you get there."
    print "</body></html>"

    mailme('New Image Uploaded by '+m['account'])



if __name__ == '__main__':
    print "content-type: text/html\n\n<html>"
    handleform()


---------------------------------------------------------------

<html>
<!--#exec cmd="cgi-bin/header.py UploadPhotos photos" -->

<form method=post action=/cgi-bin/newphoto.py enctype="multipart/form-data">
<table cellpadding=0 cellspacing=0><tr><td align=right>
Account: </td><td><input type=input name=name value=""
size=13></td></td><tr><td align=right>
Password: </td><td><input type=password name=pass value=""
size=13></td></td><tr><td align=right>
Comment: </td><td><input type=input name=comment value=""
size=40></td></td><tr><td align=right>
Image: </td><td><input type=file name=image size=40>
</td></tr><tr><td></td><td><input type=submit  value="Upload This Picture">
</td></tr></table></form>

</body></html>






More information about the Python-list mailing list