Skip to content

Instantly share code, notes, and snippets.

@summer4096
Created November 24, 2012 22:05
Show Gist options
  • Save summer4096/4141584 to your computer and use it in GitHub Desktop.
Save summer4096/4141584 to your computer and use it in GitHub Desktop.
var formidable = require('formidable');
var express = require('express');
var socket = require('socket.io');
var app = express.createServer();
var io = socket.listen(app);
app.use(express.static(__dirname + '/public'));
app.listen(process.env['app_port'] || 8000);
var uploads = {};
var uploadChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'.split('');
function uploadKey(len){
var output = '';
for (var i = 0; i < len; i++){
output += uploadChars[Math.floor(Math.random()*uploadChars.length)];
}
return output;
}
io.sockets.on('connection', function (socket){
var key = uploadKey(5);
var secret = uploadKey(40);
uploads[key] = {'secret': secret, 'receiver': false, 'sender': socket, 'going': false};
socket.emit('hello', {'key': key, 'secret': secret});
});
app.post('/upload/:key/:secret', function(req, res){
var key = req.param('key');
var secret = req.param('secret');
if (typeof uploads[key] == 'undefined') {res.send(404); return;}
if (uploads[key].secret != secret) {res.send(404); return;}
if (uploads[key].listener == false) {res.send(500); return;}
var form = new formidable.IncomingForm();
form.onPart = function(part) {
if (!part.filename) {
form.handlePart(part);
} else {
part.addListener('data', function(chunk){
uploads[key].receiver.write(chunk);
});
part.addListener('end', function(){
res.redirect('/');
uploads[key].receiver.end();
});
}
}
form.parse(req, function(){});
});
app.get('/download/:key/:filename', function(req, res){
var key = req.param('key');
if (typeof uploads[key] == 'undefined') {res.send(404); return;}
if (uploads[key].going) {res.send(404); return;}
uploads[key].going = true;
uploads[key].receiver = res;
uploads[key].sender.emit('upload');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment