ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/ryzzyj/online_upload.py
Revision: 1.2
Committed: Tue Jul 20 08:58:56 2010 UTC (14 years, 9 months ago) by ryzzyj
Content type: text/x-python
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +50 -5 lines
Error occurred while calculating annotation data.
Log Message:
added possibility to choose server url, name of upload handling form field, name of single file to upload or name of file list

File Contents

# Content
1 import mimetools
2 import mimetypes
3 import urllib
4 import urllib2
5 import sys
6 from optparse import OptionParser
7 import os.path
8 import urlparse
9
10
11 uploadField = 'myFile'
12 filelist = 'files.txt'
13 url = 'http://popcon2vm:8081/upload'
14 file = ''
15
16 class RequestForm:
17
18 def __init__(self, field, file, newname):
19 self.boundary = mimetools.choose_boundary()
20 self.field = field
21 self.filename = file
22 self.newname = newname
23
24 def getBody(self):
25 return open(self.filename).read()
26
27 def getMimetype(self):
28 return mimetypes.guess_type(self.filename)[0] or "application/octet-stream"
29
30 def getContentType(self):
31 return 'multipart/form-data; boundary=%s' % self.boundary
32
33 def __str__(self):
34 return '\r\n'.join(['--' + self.boundary,
35 'Content-Disposition: file; name="%s"; filename="%s"' % (self.field, self.newname),
36 'Content-Type: %s' % self.getMimetype(),
37 '',
38 self.getBody(),
39 '--' + self.boundary + '--',
40 ''])
41
42
43 def validateArgs():
44 if options.file != None and os.path.exists(options.file) and os.path.isfile(options.file):
45 global file
46 file = options.file
47 elif options.filelist != None and os.path.exists(options.filelist) and os.path.isfile(options.filelist):
48 global filelist
49 filelist = options.filelist
50 if options.url != None:
51 try:
52 #if url is bad this command throws error
53 urllib2.urlopen(options.url)
54 global url
55 url = options.url
56 except:
57 print 'Bad url.'
58 sys.exit()
59
60 if options.field != None:
61 global uploadField
62 uploadField = options.field
63
64
65 if __name__ == "__main__":
66
67 parser = OptionParser()
68 parser.add_option("-f", "--file", dest = "file", type = 'string', help = "uploads file to the server. If specified file list is not used.")
69 parser.add_option("-l", "--list", dest = "filelist", type = 'string', default = filelist, help = "specifies custom list of files. Default list (files.txt) is used if not specified.")
70 parser.add_option("-u", "--url", dest = "url", type = 'string', default = url, help = "web address of the script, that handles upload")
71 parser.add_option("-d", "--field", dest = "field", type = 'string', default = uploadField, help = "name of the upload field of the form.")
72 (options, args) = parser.parse_args()
73 validateArgs()
74
75 if file != '':
76 file = (file, )
77 elif os.path.exists(filelist) and os.path.isfile(filelist):
78 file = open(filelist)
79 else:
80 print "No list of files to upload found. Closing program."
81 sys.exit()
82
83 for path in file:
84 path = path.replace("\n", "")
85 base = os.path.basename(os.path.dirname(path))
86 name = os.path.basename(path)
87 if base != '' and name != '':
88 filename = "%s_%s" % (base, name)
89 elif name != '':
90 filename = name
91 else:
92 print 'Wrong file path (%s). Uploading next file.' % path
93 continue
94 if os.path.exists(path) and os.path.isfile(path):
95 form = RequestForm(uploadField, path, filename)
96 request = urllib2.Request(url)
97 if request != None:
98 body = str(form)
99 request.add_header('Content-type', form.getContentType())
100 request.add_data(body)
101