Gian0508
Gian0508

Reputation: 77

NodeJS HTTP POST receive an Image with Express

I am using Bluemix to develop a 'HTTP POST listener' with NodeJS. This server should be the link between an Android Application and a Watson Bluemix Service

This is my code

/*eslint-env node*/
// This application uses express as its web server
// for more info, see: http://expressjs.com
var express = require('express');

// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require('cfenv');

// create a new express server
var app = express();

// serve the files out of ./public as our main files
app.use(express.static(__dirname + '/public'));

// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();

/* 'BODY PARSER - NOT WORKING' */
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));

app.use(bodyParser.json());     //Assuming JSON  ENCODED INPUT
app.use(express.bodyParser({uploadDir:'/images'}));

// start server on the specified port and binding host
app.listen(appEnv.port, '0.0.0.0', function() {

// print a message when the server starts listening
console.log("server starting on " + appEnv.url);

app.post('/handle',function(request,response){
    var image64=request.body.encoded_String;
    var imageName=request.body.image_name;

    /*OK LOG THIS (Encoded Base64 image)*/
    console.log("IMG RECEIVED: " + imageName); //OK
    console.log("ENCODED: " + image64);        // = undefined (chunk problems?)

    response.writeHead(200, { "Content-Type": "text/plain" });
    response.write('Hello World - Example...\n');
    response.end(); 

    });

});

How can I receive a base64 encoded image and save it to a folder?

Thanks for you help!

Upvotes: 0

Views: 1805

Answers (1)

Nonemoticoner
Nonemoticoner

Reputation: 648

String with image received in base64 has usually it's format written at the beginning which has to be removed (or at least I used to remove it).

var base64Data = str.replace(/^data:image\/png;base64,/, ""); // str - string with image

Then you have to save it with fs:

fs.writeFile("../dir/to/save/image.png", base64Data, 'base64', function(err) {});

And that's basically all.

Upvotes: 1

Related Questions