UNPKG

enhancer-data-bridge

Version:

A bridge between Enhancer Clould and user business datasource

77 lines (67 loc) 2.42 kB
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)); } }