Created
August 4, 2010 03:08
-
-
Save shimondoodkin/507573 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var sys = require("sys"), | |
| fs = require('fs'), | |
| url = require('url'), | |
| http = require("http"), | |
| multipart = require("./lib/multipart"); | |
| http.createServer(function (request, response) { | |
| switch (url.parse(request.url).pathname) { | |
| case '/': | |
| display_form(request, response); | |
| break; | |
| case '/upload': | |
| upload_files(request, response,'./',function(error,data) { | |
| if(error!==null) | |
| { | |
| response.writeHead(200, {'Content-Type': 'text/plain'}); | |
| response.write('Multipart Parse Error'); | |
| response.end(); | |
| } | |
| else | |
| { | |
| response.writeHead(200, {'Content-Type': 'text/plain'}); | |
| response.write('Thanks for the upload'); | |
| response.end(); | |
| } | |
| }); | |
| break; | |
| default: | |
| show_404(request, response); | |
| break; | |
| } | |
| }).listen(8124); | |
| function display_form(request, response) { | |
| response.writeHead(200, {'Content-Type': 'text/html'}); | |
| response.write( | |
| '<form action="/upload" method="POST" enctype="multipart/form-data">' + | |
| '<input type="file" name="upload-file">' + | |
| '<input type="submit" value="Upload">' + | |
| '</form>' | |
| ); | |
| response.end(); | |
| } | |
| function upload_files(request, response,folder,callback) | |
| { | |
| request.setEncoding('binary'); | |
| var parser = multipart.parser(); | |
| parser.headers = request.headers; | |
| var inquee=0,finished=false; | |
| var request_vars=[]; | |
| var name, filename, file; | |
| parser.addListener('onPartBegin', function(part) | |
| { | |
| name = part.name; | |
| filename = part.filename; | |
| file = fs.createWriteStream(folder + filename,{ 'flags': 'w', 'encoding': 'binary', 'mode': 0666 }); | |
| inquee++; | |
| sys.pump(parser, file , function() | |
| { | |
| sys.debug('file end'); | |
| inquee--; | |
| if(finished&&inquee==0) callback(null,request_vars); // if file writing goes beyond parsing, call callback later when done. | |
| }); | |
| }); | |
| parser.addListener('onEnd', function(part) { finished=true; if(inquee==0) callback(null,request_vars);}); | |
| parser.addListener('onError', function(err) { sys.debug(' parser on end '); callback(err,request_vars); }); | |
| sys.pump(request, parser, function() { sys.debug('request end'); }); | |
| } | |
| function show_404(request, response) { | |
| response.writeHead(404, {'Content-Type': 'text/plain'}); | |
| response.write('404 - Please try again.'); | |
| response.end(); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment