initial implementation
This commit is contained in:
+50
-3
@@ -3,22 +3,69 @@ var moment = require('moment');
|
||||
var express = require('express');
|
||||
require('express-async-errors');
|
||||
var bodyParser = require('body-parser');
|
||||
var multer = require('multer');
|
||||
var storage = multer.memoryStorage();
|
||||
var upload = multer({ storage: storage });
|
||||
var request = require('request');
|
||||
var app = express();
|
||||
var fs = require('fs');
|
||||
var md5 = require('md5');
|
||||
var gm = require('gm');
|
||||
var env = process.env.NODE_ENV || 'development';
|
||||
var config = require('../config/vnc-avatarservice.js')[env];
|
||||
console.log(moment().format("LTS") + ' Using configuration', config);
|
||||
|
||||
|
||||
var servicePort = config.servicePort;
|
||||
var outputDir = "";
|
||||
if (config.outputDir.endsWith("/")) {
|
||||
outputDir = config.outputDir;
|
||||
} else {
|
||||
outputDir = config.outputDir + "/";
|
||||
}
|
||||
|
||||
app.use(bodyParser.json()); // for parsing application/json
|
||||
|
||||
var defaultresolution = config.defaultresolution;
|
||||
var resolutions = config.resolutions;
|
||||
|
||||
if (resolutions.indexOf(defaultresolution) == -1) {
|
||||
resolutions.push(defaultresolution);
|
||||
}
|
||||
|
||||
// app.use(bodyParser.json()); // for parsing application/json
|
||||
app.use(bodyParser.json( { type: 'application/*+json' }));
|
||||
app.use(bodyParser.raw( { type: 'image/*' }));
|
||||
app.use(logger('dev'));
|
||||
|
||||
|
||||
// function store
|
||||
function resizeAndSave(buf, jidhash) {
|
||||
if (resolutions.length > 0) {
|
||||
for (var i = 0; i < resolutions.length; i++) {
|
||||
var reso = resolutions[i];
|
||||
var outFileName = outputDir + jidhash + '.jpg';
|
||||
if (reso != defaultresolution) {
|
||||
outFileName = outputDir + jidhash + '-' + parseInt(reso) + '.jpg';
|
||||
}
|
||||
gm(buf, 'image.png').resize(reso,reso).write(outFileName, function (err){
|
||||
if (err) return handle(err);
|
||||
console.log("wrote to " + outFileName);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
app.post('/notify', async function (req, res) {
|
||||
|
||||
app.put('/avatarupload/:jid', async function (req, res) {
|
||||
var jid = req.params.jid;
|
||||
if (jid.indexOf("@") == -1) {
|
||||
res.status(500).json('invalid jid/mail');
|
||||
} else {
|
||||
var jidhash = md5(jid);
|
||||
var uploadedImageBuffer = req.body;
|
||||
resizeAndSave(uploadedImageBuffer, jidhash);
|
||||
|
||||
res.json(jidhash);
|
||||
}
|
||||
});
|
||||
|
||||
var server = app.listen(servicePort, function () {
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
"express-async-errors": "3.1.1",
|
||||
"fs": "^0.0.1-security",
|
||||
"gm": "^1.23.1",
|
||||
"md5": "^2.2.1",
|
||||
"moment": "2.24.0",
|
||||
"morgan": "1.9.1",
|
||||
"multer": "^1.4.1",
|
||||
"request": "2.88.0"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user