2015-06-25 13 views
11

Sto utilizzando loopback per la memorizzazione dell'immagine su server.Modifica immagine ottenuta da loopback-componente-storage

voglio modificare il nome del file del file prima di essere salvato sul server.

Anche io voglio convertirlo in un altro modulo di anteprima prima di essere salvato.

Ecco come sto.

Al lato client

Upload.upload(
{ 
    url: '/api/containers/container_name/upload', 
    file: file, 
    fileName: "demoImage.jpg", 
    //Additional data with file 
    params:{ 
    orderId: 1, 
    customerId: 1 
    } 
}); 

lato server che sto ricevendo i "params" di query, ma non ottenere il "Nome file"

My Storage nome del modello è container

Container.beforeRemote('upload', function(ctx, modelInstance, next) { 

    //OUPTUTS: {orderId:1, customerId:1]} 
    console.log(ctx.req.query); 

    //Now I want to change the File Name of the file. 
    //But not getting how to do that 

    next(); 
}) 

Come modificare il nome file del file salvato sul server?

risposta

23

L'ho capito.

Dobbiamo definire una funzione personalizzata getFileName in boot/configure-storage.js.

Supponiamo mia origine dati per loopback-component-storage è presImage.

di 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."; 
     } 
    }; 
} 

comuni/modelli/container.js

Supponiamo ora il mio modello contenitore è 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.. 
}; 

Ora, per convertirlo immagini per dimensioni Thumbnail

Scaricare il quickthumb

Ecco come usarlo con loopback.

Questo codice viene copiato direttamente dal Loopback thumbnail view

comune/modelli/contenitore.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(); 
    }); 

}; 
+2

risposta Nizza, ma penso che l'orderId, customerId deve essere impostato nel lato server e non impostare in forma in modo che non può essere modificato dal utente finale. –

0

Portare in dono la risposta di cui sopra, questo configure-storage consente il nome del file da impostare in modo esplicito tramite req.params.filename e se non viene fornito per difetto al nome esistente.

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 

    }; 
} 
Problemi correlati