Modify image obtained from loopback-component-storage Modify image obtained from loopback-component-storage express express

Modify image obtained from loopback-component-storage


I figured it out.

We have to define a custom function getFileName in boot/configure-storage.js.

Suppose my datasource for loopback-component-storage is presImage.

server/boot/configure-storage.js

module.exports = function(app) {    //Function for checking the file type..    app.dataSources.presImage.connector.getFilename = function(file, req, res) {        //First checking the file type..        var pattern = /^image\/.+$/;        var value = pattern.test(file.type);        if(value ){            var fileExtension = file.name.split('.').pop();            var container = file.container;            var time = new Date().getTime();            var query = req.query;            var customerId = query.customerId;            var orderId    = query.orderId;            //Now preparing the file name..            //customerId_time_orderId.extension            var NewFileName = '' + customerId + '_' + time + '_' + orderId + '.' + fileExtension;             //And the file name will be saved as defined..            return NewFileName;        }        else{            throw "FileTypeError: Only File of Image type is accepted.";        }    };}

common/models/container.js

Now suppose my container model is container.

module.exports = function(Container) {    Container.afterRemote('upload', function(ctx,  modelInstance, next) {      var files = ctx.result.result.files.file;      for(var i=0; i<files.length; i++){        var ModifiedfileName = files[i].name;        console.log(ModifiedfileName) //outputs the modified file name.      } //for loop      next();    }); //afterRemote..};

Now for converting it images to Thumbnail size

Download the quickthumb

Here is how to use it with loopback.

This code is copied directly from Loopback thumbnail view

common/models/container.js

module.exports = function(Container) {    var qt = require('quickthumb');    Container.afterRemote('upload', function(ctx, res, next) {        var file = res.result.files.file[0];        var file_path = "./server/storage/" + file.container + "/" + file.name;        var file_thumb_path = "./server/storage/" + file.container + "/thumb/" + file.name;        qt.convert({            src: file_path,            dst: file_thumb_path,            width: 100        }, function (err, path) {        });        next();    });};


Piggybacking on the answer above, this configure-storage enables the file name to be set explicitly via req.params.filename and to default to the existing name if none is provided.

configure-storage.js

module.exports = function(app) {//Function for checking the file type..    app.dataSources.storage.connector.getFilename = function(file, req, ignoreRes) {        if (!req.params.filename) {            return file.name        }        var fileExtension = file.name.split('.').pop()        return req.params.filename + '.' + fileExtension    };}