enhancer-data-bridge
Version:
A bridge between Enhancer Clould and user business datasource
77 lines (67 loc) • 2.42 kB
JavaScript
var os = require('os');
var path = require('path');
var multiparty = require('multiparty');
var util = require('util');
var baseDir = path.join(os.homedir(), 'enhancer/data');
var fs = require('fs');
var moment = require('moment');
var mkdirp = require('mkdirp');
var serveStatic = require('serve-static');
var serve = serveStatic(baseDir, {'index': ['index.html', 'index.htm']});
var finalhandler = require('finalhandler');
var config = require('../config');
var fileBaseUrl = config.fileBaseUrl;
var MAX_FILE_SIZE = config.isOfficialEnv
? 1024 * 1024
: 1024 * 1024 * 1024 * 128;
module.exports = {
upload(req, res, next) {
var uploadDir = path.join(baseDir, moment().format('YYMMDD') + '/' + new Date().getTime() % 1000);
res.setHeader('Access-Control-Allow-Origin', '*');
mkdirp.sync(uploadDir);
var form = new multiparty.Form({
uploadDir: uploadDir,
maxFilesSize: MAX_FILE_SIZE
});
var fileBase = req.query.private === 'true'
? req.protocol + '://' + req.headers.host + '/file/'
: fileBaseUrl;
form.parse(req, function(err, fields, files) {
if (err) {
return res.send({
success: false,
message: err.message + '. Notes: The max file size is 1mb in development environment.'
});
}
var ret = [];
for (var f in files) {
files[f].forEach(function(file) {
fs.rename(file.path, uploadDir + '/' + file.originalFilename, function(err) {
if (err) {
console.error('Rename file failed. Reason: ' + err.message);
console.error(err);
}
});
var p = uploadDir + '/' + encodeURIComponent(file.originalFilename);
ret.push({
fieldName: file.fieldName,
originalFilename: file.originalFilename,
size: file.size,
url: fileBase + path.relative(baseDir, p).replace(/\\/g, '/'),
relativeUrl: '/file/' + path.relative(baseDir, p).replace(/\\/g, '/')
});
});
}
res.send({
success: true,
data: {fields: fields, files: ret}
});
});
},
download(req, res, next) {
req.originalUrl = req.originalUrl.replace('/file', '');
req.url = req.url.replace('/file', '');
res.setHeader('Cache-Control', 'public, max-age=31557600');
serve(req, res, finalhandler(req, res));
}
}