-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
79 lines (66 loc) · 2.24 KB
/
app.js
File metadata and controls
79 lines (66 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
var express = require('express')
, crypto = require('crypto')
, app = express()
, server = app.listen(8080)
, io = require('socket.io').listen(server)
, files = {};
app.set('view engine', 'jade');
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
res.render('sender', {});
});
app.get('/get/:secure', function (req, res) {
if (files[req.params.secure]) {
res.render('receiver', { name: files[req.params.secure].name, token: req.params.secure });
} else {
res.render('receiver', { name: 0 });
}
});
app.get('/file/get/:secure', function (req, res) {
if (files[req.params.secure]) {
io.sockets.emit('start', { token: req.params.secure });
io.sockets.emit('moreData', { place: 0, percent: 0, token: req.params.secure });
res.setHeader('Content-disposition', 'attachment; filename=' + files[req.params.secure].name);
res.setHeader('Content-Length', files[req.params.secure].fileSize);
var intervalID = setInterval(function () {
if (files[req.params.secure].data.length) {
res.write(files[req.params.secure].data, 'binary');
files[req.params.secure].data = '';
}
if (files[req.params.secure].isLoaded) {
res.end();
clearInterval(intervalID);
delete files[req.params.secure];
}
}, 1000);
} else {
res.redirect('/get/file-not-found')
}
});
io.sockets.on('connection', function (socket) {
socket.on('save', function (d) {
crypto.randomBytes(12, function (ex, buf) {
var token = buf.toString('hex');
files[token] = {
name: d.name,
fileSize: d.size,
data: "",
downloaded: 0,
isLoaded: false
};
socket.emit('url', { token: token });
});
});
socket.on('upload', function (d) {
files[d.token].downloaded += d.data.length;
files[d.token].data += d.data;
if (files[d.token].downloaded == files[d.token].fileSize) {
files[d.token].isLoaded = true;
socket.emit('done', { name: files.name });
} else {
var place = files[d.token].downloaded / 524288
, percent = (files[d.token].downloaded / files[d.token].fileSize) * 100;
socket.emit('moreData', { place: place, percent: percent, token: d.token });
}
});
});