forked from lovre/fribox
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFriBox.js
97 lines (85 loc) · 3.15 KB
/
FriBox.js
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
if (!process.env.PORT) {
process.env.PORT = 8080;
}
var mime = require('mime');
var formidable = require('formidable');
var http = require('http');
var fs = require('fs-extra');
var util = require('util');
var path = require('path');
var dataDir = "./data/";
var streznik = http.createServer(function(zahteva, odgovor) {
if (zahteva.url == '/') {
posredujOsnovnoStran(odgovor);
} else if (zahteva.url == '/datoteke') {
posredujSeznamDatotek(odgovor);
} else if (zahteva.url.startsWith('/brisi')) {
izbrisiDatoteko(odgovor, dataDir + zahteva.url.replace("/brisi", ""));
} else if (zahteva.url.startsWith('/prenesi')) {
posredujStaticnoVsebino(odgovor, dataDir + zahteva.url.replace("/prenesi", ""), "application/octet-stream");
} else if (zahteva.url == "/nalozi") {
naloziDatoteko(zahteva, odgovor);
} else {
posredujStaticnoVsebino(odgovor, './public' + zahteva.url, "");
}
});
function posredujOsnovnoStran(odgovor) {
posredujStaticnoVsebino(odgovor, './public/fribox.html', "");
}
function posredujStaticnoVsebino(odgovor, absolutnaPotDoDatoteke, mimeType) {
fs.exists(absolutnaPotDoDatoteke, function(datotekaObstaja) {
if (datotekaObstaja) {
fs.readFile(absolutnaPotDoDatoteke, function(napaka, datotekaVsebina) {
if (napaka) {
//Posreduj napako
} else {
posredujDatoteko(odgovor, absolutnaPotDoDatoteke, datotekaVsebina, mimeType);
}
})
} else {
//Posreduj napako
}
})
}
function posredujDatoteko(odgovor, datotekaPot, datotekaVsebina, mimeType) {
if (mimeType == "") {
odgovor.writeHead(200, {'Content-Type': mime.lookup(path.basename(datotekaPot))});
} else {
odgovor.writeHead(200, {'Content-Type': mimeType});
}
odgovor.end(datotekaVsebina);
}
function posredujSeznamDatotek(odgovor) {
odgovor.writeHead(200, {'Content-Type': 'application/json'});
fs.readdir(dataDir, function(napaka, datoteke) {
if (napaka) {
//Posreduj napako
} else {
var rezultat = [];
for (var i=0; i<datoteke.length; i++) {
var datoteka = datoteke[i];
var velikost = fs.statSync(dataDir+datoteka).size;
rezultat.push({datoteka: datoteka, velikost: velikost});
}
odgovor.write(JSON.stringify(rezultat));
odgovor.end();
}
})
}
function naloziDatoteko(zahteva, odgovor) {
var form = new formidable.IncomingForm();
form.parse(zahteva, function(napaka, polja, datoteke) {
util.inspect({fields: polja, files: datoteke});
});
form.on('end', function(fields, files) {
var zacasnaPot = this.openedFiles[0].path;
var datoteka = this.openedFiles[0].name;
fs.copy(zacasnaPot, dataDir + datoteka, function(napaka) {
if (napaka) {
//Posreduj napako
} else {
posredujOsnovnoStran(odgovor);
}
});
});
}