| 1 | #!/usr/bin/python |
|---|
| 2 | |
|---|
| 3 | import os |
|---|
| 4 | from twisted.internet import reactor |
|---|
| 5 | from twisted.web2 import server, http, resource, channel |
|---|
| 6 | from twisted.web2 import http_headers, responsecode |
|---|
| 7 | from twisted.web2 import iweb, stream |
|---|
| 8 | |
|---|
| 9 | SAVEDIR = "/tmp" |
|---|
| 10 | READSIZE=8192 |
|---|
| 11 | |
|---|
| 12 | class UploadFile(resource.PostableResource): |
|---|
| 13 | def render(self, ctx): |
|---|
| 14 | request = iweb.IRequest(ctx) |
|---|
| 15 | filename = request.files['filename'][0][0] |
|---|
| 16 | file = request.files['filename'][0][2] |
|---|
| 17 | |
|---|
| 18 | filestream = stream.FileStream(file) |
|---|
| 19 | dest = os.path.join(SAVEDIR,filename) |
|---|
| 20 | destfile = os.fdopen(os.open(dest, |
|---|
| 21 | os.O_WRONLY | os.O_CREAT | os.O_EXCL, |
|---|
| 22 | 0644), 'w', 0) |
|---|
| 23 | stream.readIntoFile(filestream, destfile) |
|---|
| 24 | |
|---|
| 25 | msg = "saved %s to %s" % (filename, dest) |
|---|
| 26 | print msg |
|---|
| 27 | return http.Response(stream="%s" % msg) |
|---|
| 28 | |
|---|
| 29 | class Toplevel(resource.Resource): |
|---|
| 30 | addSlash = True |
|---|
| 31 | def render(self, ctx): |
|---|
| 32 | return http.Response(responsecode.OK, |
|---|
| 33 | {'content-type': http_headers.MimeType('text', 'html')}, |
|---|
| 34 | "Hello") |
|---|
| 35 | |
|---|
| 36 | child_uploadfile = UploadFile() |
|---|
| 37 | |
|---|
| 38 | if __name__ == "__main__": |
|---|
| 39 | site = server.Site(Toplevel()) |
|---|
| 40 | reactor.listenTCP(1080, channel.HTTPFactory(site)) |
|---|
| 41 | reactor.run() |
|---|