This repository has been archived by the owner on Nov 27, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
105 lines (92 loc) · 2.54 KB
/
server.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
var _ = require('lodash');
var fs = require('fs');
var fse = require('fs-extra');
var path = require('path');
var util = require('util');
var yaml = require('js-yaml');
var express = require('express');
var serveStatic = require('serve-static');
var formidable = require('formidable');
var app = express();
var cwd = process.cwd();
var defaults = {
imgSrc: 'imgSrc',
imgDest: 'imgDest'
};
var configFilePath = path.join(cwd, '_config.yml');
var config;
try {
fs.accessSync(configFilePath, fs.R_OK);
config = yaml.safeLoad(fs.readFileSync('_config.yml'), 'utf8');
} catch (e) {
config = {};
}
var PORT = Number(config.port) || 9000;
var imgSrc = path.join(cwd, config.imgSrc || defaults.imgSrc);
var imgDest = path.join(cwd, config.imgDest || defaults.imgDest);
app.use(serveStatic(__dirname, {'index': ['index.html', 'index.htm']}));
app.use(serveStatic(cwd));
app.get('/image/*', function (req, res, next) {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.get('/files', function (req, res, next) {
fse.ensureDir(imgSrc, function (err) {
if (err) {
console.error(err);
} else {
fs.readdir(imgSrc, function (err, files) {
if (err) {
res.status(404).end();
} else {
var data = _.chain(files)
.map(function (file) {
return {
name: file
};
})
.filter(function (file) {
return path.extname(file.name) === '.jpg';
})
.value();
res.json(data);
}
});
}
});
});
app.post('/upload', function (req, res, next) {
var form = new formidable.IncomingForm();
fse.ensureDir(imgDest, function (err) {
if (err) {
console.error(err);
} else {
form.uploadDir = imgDest;
form.keepExtensions = true;
form.type = 'multipart';
form.parse(req, function (err, fields, files) {
res.status(200).json({ fields: fields, files: files });
_.forEach(files, function (file, key) {
var newPath = path.join(path.dirname(file.path), file.name);
fse.move(file.path, newPath, { clobber: true }, function (err) {
if (err) {
console.error(err);
}
});
});
});
}
});
});
app.get('/clearImgSrc', function (req, res) {
fse.emptyDir(imgSrc, function (err) {
if (err) {
console.error(err);
res.status(404).end();
} else {
res.status(200).end();
}
});
});
app.listen(PORT, function () {
console.log('127.0.0.1:%d', PORT);
});