Изменить изображение, полученное из loopback-component-storage

Я использую loopback для хранения изображения в server

Я хочу изменить имя файла файла перед сохранением на сервере.

Также я хочу преобразовать его в другую форму миниатюр перед сохранением.

Вот как у меня дела.

  

На стороне клиента

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

На стороне сервера я получаю запрос "params", но не получаю "Имя файла"

Имя модели моего хранилища: 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();
})

Как изменить имя файла, сохраняемого на сервере?

12 голосов | спросил Robins Gupta 25 J0000006Europe/Moscow 2015, 14:06:44

2 ответа


0

Я понял это.

Мы должны определить пользовательскую функцию getFileName в boot/configure-storage.js.

Предположим, что мой источник данных для loopback-component-storage равен presImage .

  

сервер /загрузки /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.";
        }
    };
}
  

общая /модель /container.js

Теперь предположим, что моя модель контейнера - 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..
};

Теперь для преобразования его изображений в размер эскиза

Загрузите quickthumb

Вот как это использовать с обратной связью.

Этот код скопирован непосредственно из представления миниатюр с обратной связью

  

общая /модель /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();
    });

};
ответил Robins Gupta 25 J0000006Europe/Moscow 2015, 23:11:28
0

В сочетании с ответом выше, это хранилище конфигурации позволяет явно задавать имя файла через req.params.filename и по умолчанию использовать существующее имя, если ничего не указано.

  

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

    };
}
ответил user465342 1 J0000006Europe/Moscow 2016, 15:53:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132