Trying to proxy an image in node-js/express Trying to proxy an image in node-js/express express express

Trying to proxy an image in node-js/express


As usual, the simple solution is the best. Simply npm install request and then use it like this:

var request = require('request');app.get('/fileThumbnail', function(req, res) {    var url = proxiedURL +"?" + querystring.stringify(req.query);    logger.info('/fileThumbnail going to url', url);     request.get(url).pipe(res);});


Using pipe() didn't work for my version of Express, however this implemention did. It proxies http and https image urls.

Call with:

http://example.com/image?url=https%3A%2F%2Fwww.google.com%2Fimages%2Fbranding%2Fgooglelogo%2F2x%2Fgooglelogo_color_272x92dp.png

Source:

var url         = require('url');var http        = require('http');var https       = require('https');app.get('/image', function (req, res) {    var parts = url.parse(req.url, true);    var imageUrl = parts.query.url;    parts = url.parse(imageUrl);    var filename = parts.pathname.split("/").pop();    var options = {        port: (parts.protocol === "https:" ? 443 : 80),        host: parts.hostname,        method: 'GET',        path: parts.path,        accept: '*/*'    };    var request = (options.port === 443 ? https.request(options) : http.request(options));    request.addListener('response', function (proxyResponse) {        var offset = 0;        var contentLength = parseInt(proxyResponse.headers["content-length"], 10);        var body = new Buffer(contentLength);        proxyResponse.setEncoding('binary');        proxyResponse.addListener('data', function(chunk) {            body.write(chunk, offset, "binary");            offset += chunk.length;        });         proxyResponse.addListener('end', function() {            res.contentType(filename);            res.write(body);            res.end();                    });    });    request.end();});