-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrequestHandlers.js
111 lines (92 loc) · 3.38 KB
/
requestHandlers.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
98
99
100
101
102
103
104
105
106
107
108
109
110
var responseHelper = require('./responseHelper');
var paramsUtil = require('./paramsUtil');
var transforms = require('./transforms');
var rkutils = require('./rkutils');
var qs = require('querystring');
var fs = require('fs');
var formidable = require('formidable');
var IMAGE_PATH = '/tmp/upload.jpg';
function htmlBegin() {
return '<html>\n'
+'<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head>\n'
+'<body>\n';
}
function htmlEnd() {
return '</body></html>\n';
}
function start(req, rsp) {
console.log('start action');
var body = htmlBegin()
+'<form action="/upload" enctype="multipart/form-data" method="post">'
+'<input type="file" name="upload" multiple="multiple">'
+'<input type="submit" value="Upload file"/></form>'
+htmlEnd();
responseHelper.respond(200, 'text/html', body, rsp);
}
function upload(req, rsp) {
console.log('upload action');
var form = new formidable.IncomingForm();
form.parse(req, function(error, fields, files) {
fs.rename(files.upload.path, IMAGE_PATH, function(error) {
if (error) {
fs.unlink(IMAGE_PATH);
fs.rename(files.upload.path, IMAGE_PATH);
}
});
rsp.writeHead(302, { 'Location': '/show' });
rsp.end();
});
}
function showPage(req, rsp) {
console.log('showPage action');
var htmlText = 'Uploaded image:<br/><img src="/showImage"/>';
var params = paramsUtil.getQueryParams(req);
if (params) {
htmlText = htmlText.replace('showImage', 'showImage?'+params);
}
responseHelper.respond(200, 'text/html', htmlText, rsp);
}
function showImage(req, rsp) {
console.log('showImage action');
var params = paramsUtil.getQueryParamsObj(req);
showImage_recurse(rsp, IMAGE_PATH, params);
}
function showImage_recurse(rsp, filename, params) {
console.log("showImage_recurse(%s, %j)", filename, params);
if (rkutils.objectIsEmpty(params)) {
showImageFinal(rsp, filename);
} else {
var car = rkutils.objectCar(params);
var transformName = car['name'];
var transformValue = car['value'];
var handler = transforms[transformName];
console.log("calling "+transformName);
if (typeof handler === 'function') {
var transFilename = filename.replace(/(.*)\./, "$1..");
handler(filename, transFilename, transformValue, function(error, stdout, stderr) {
if (error) {
console.log("error: %s\n", error);
responseHelper.respond(500, 'text/plain', error+'\n', rsp);
} else {
showImage_recurse(rsp, transFilename, rkutils.objectCdr(params));
}
});
} else {
showImage_recurse(rsp, filename, rkutils.objectCdr(params));
}
}
}
function showImageFinal(rsp, filename) {
var handler = function(error, file) {
if (error) {
responseHelper.respond(500, 'text/plain', error+'\n', rsp);
} else {
responseHelper.respond(200, 'image/jpeg', file, rsp);
}
};
fs.readFile(filename, 'binary', handler);
}
exports.start = start;
exports.upload = upload;
exports.show = showPage;
exports.showImage = showImage;