Hi Nick
Thanks for helping !
Here are the samples:
1. NR with skipper
-npm install skipper
-npm install skipper-memory
-npm install streamifier
-settings.js:
... httpNodeMiddleware: function(req,res,next) {
//next();
skipper(req,res, next);
},
functionGlobalContext: {
skipperMemory: require('skipper-memory'),
streamifier: require('streamifier')
},
-flow:
[{"id":"38f3acb4.787ad4","type":"function","z":"c3e758bf.055ed8","name":"multipart form-data parsing","func":"node.log(\"hi there\");\n\nvar skipperMemory = global.get('skipperMemory');\nvar streamifier = global.get('streamifier');\n\nvar tempFolder = \"/temp\";\n\n//Upload attachement to mem storage\nvar memFileName = new Date().getTime().toString();\nnode.log(\"memFileName: \" + memFileName);\n\nif (msg.req.file){\n node.log(\"found msg.req.file\");\n}else{\n node.log(\"not found msg.req.file\");\n}\nmsg.req.file('file').upload({\n adapter: skipperMemory,\n dirname: tempFolder,\n filename: memFileName\n}, function (err, uploadedFiles) {\n if (err) {\n msg.payload = err;\n\t\tnode.error(\"Error\", msg);\n }\n else {\n node.log(\"uploaded to mem cache: \" + uploadedFiles[0].fd);\n \n //Retrieve attachement from mem cache \n skipperMemory.read(uploadedFiles[0].fd, function(err, content){\n if (err){\n msg.payload = err;\n node.error(\"Error\", msg);\n }\n else{\n node.log(\"retrieved from mem cache: \" + uploadedFiles[0].fd);\n \n //Add attachement to formData\n msg.headers = msg.req.headers;\n formData.attachments = streamifier.createReadStream(content);\n \n //Delete attachement from mem cache\n skipperMemory.rm(uploadedFiles[0].fd, function(err, content){\n if (err){\n msg.payload = err;\n node.error(\"Error\", msg);\n }\n else{\n node.log(uploadedFiles[0].fd + \" removed from mem cache\");\n node.send(msg);\n }\n }); \n }\n });\n }\n});\n","outputs":1,"noerr":0,"x":649,"y":150,"wires":[["42033b30.95a444"]]}]
- Pasted here please find the 'multipart form-data parsing' function script with no white spaces:
node.log("hi there");
var skipperMemory = global.get('skipperMemory');
var streamifier = global.get('streamifier');
var tempFolder = "/temp";
//Upload attachement to mem storage
var memFileName = new Date().getTime().toString();
node.log("memFileName: " + memFileName);
if (msg.req.file){
node.log("found msg.req.file");
}else{
node.log("not found msg.req.file");
}
msg.req.file('file').upload({
adapter: skipperMemory,
dirname: tempFolder,
filename: memFileName
}, function (err, uploadedFiles) {
if (err) {
msg.payload = err;
node.error("Error", msg);
}
else {
node.log("uploaded to mem cache: " + uploadedFiles[0].fd);
//Retrieve attachement from mem cache
skipperMemory.read(uploadedFiles[0].fd, function(err, content){
if (err){
msg.payload = err;
node.error("Error", msg);
}
else{
node.log("retrieved from mem cache: " + uploadedFiles[0].fd);
//Add attachement to formData
msg.headers = msg.req.headers;
formData.attachments = streamifier.createReadStream(content);
//Delete attachement from mem cache
skipperMemory.rm(uploadedFiles[0].fd, function(err, content){
if (err){
msg.payload = err;
node.error("Error", msg);
}
else{
node.log(uploadedFiles[0].fd + " removed from mem cache");
node.send(msg);
}
});
}
});
}
});
2. Node.js app with skipper as Middleware and skipper-memory adapter
skipper_server.js:
==================
var express = require("express"),
app = express();
var async = require('async');
var fs = require('fs');
var skipperMemory = require("skipper-memory")();
app.use(require("skipper")());
var appEnv;
startServer = function(){
app.listen(appEnv.port, function() {
console.log('listening on port', appEnv.port);
});
}
var configFile = process.argv[2] || 'mem_settings.json';
fs.readFile(configFile, 'utf8', function (err, data) {
if (err) {
logger.error(err);
process.exit(1);
}
appEnv = JSON.parse(data);
startServer();
});
var tempFolder = "/temp";
app.get("/files", function (request, response) {
skipperMemory.ls(tempFolder, function(err, fileNames){
if (err){
response.status(500).send(err);
}else{
console.log(JSON.stringify(fileNames));
response.json(fileNames);
}
});
});
app.get("/latest", function (request, response) {
skipperMemory.ls(tempFolder, function(err, fileNames){
if (err){
response.status(500).send(err);
}else{
console.log(JSON.stringify(fileNames));
if (fileNames.length > 0){
skipperMemory.read(tempFolder + "/" + fileNames[fileNames.length - 1], function(err, content){
if (err)
response.status(500).send(err);
else{
response.setHeader('content-type', 'image/png');
response.send(content);
}
});
}else{
response.json({status: "empty cache"});
}
}
});
});
app.get("/file", function (request, response) {
console.log("get file " + JSON.stringify(request.query));
skipperMemory.read(request.query.fd, function(err, content){
if (err)
response.status(500).send(err);
else{
response.setHeader('content-type', 'image/png');
response.send(content);
}
});
});
app.post("/upload", function (request, response) {
//check cache size
skipperMemory.ls(tempFolder, function(err, fileNames){
if (err){
response.status(500).send(err);
}else{
console.log("files in cache: " + JSON.stringify(fileNames));
async.whilst(
function () { return fileNames.length >= appEnv.cacheSize; },
function (callback) {
//remove old files from cache
skipperMemory.rm(tempFolder + "/" + fileNames[0], function(err, content){
if (err)
callback(err);
else{
fileNames.shift();
console.log("file removed from cache. New cach is: " + JSON.stringify(fileNames));
callback(null, fileNames);
}
});
},
function (err, fileNames) {
if (fileNames)
console.log("files in cache after cleaning oldest: " + JSON.stringify(fileNames));
if (err){
response.status(500).send(err);
}else{
var fileName = new Date().getTime().toString();
console.log("new fileName: " + fileName);
request.file('file').upload({
adapter: require("skipper-memory"),
dirname: tempFolder,
filename: fileName
}, function (err, uploadedFiles) {
if (err) {
console.log(err);
response.status(500).send(err);
}
else {
response.json(uploadedFiles);
}
});
}
}
);
}
});
});
mem_settings.json
=================
{
"port": 6080,
"cacheSize": 10
}
-POSTMAN test queries:
POST
http://localhost:6080/upload
request body is form-data with 'file' element of type file. Select a *.jpg image.
GET
http://localhost:6080/latest
response is the latest image uploaded to memory cache