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