修改从回送组件存储获得的图像
我正在使用loopback
将图像存储到server
。
我想在保存到服务器之前修改 文件的文件名 。
另外,我想在保存之前将其转换为另一个缩略图表单。
这是我如何做的。
在客户端
Upload.upload( { url: '/api/containers/container_name/upload', file: file, fileName: "demoImage.jpg", //Additional data with file params:{ orderId: 1, customerId: 1 } });
在服务器端我收到查询“参数”,但没有得到“文件名”
我的存储模型名称是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(); })
如何更改在服务器上保存的文件的文件名?
我想到了。
我们必须在boot/configure-storage.js
定义一个自定义函数getFileName 。
假设我的loopback-component-storage
数据源是presImage 。
服务器的/ boot /configuration,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
以下是如何使用它与回送。
此代码直接从Loopback缩略图视图中复制
通用/模型/ 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(); }); };
在上面的答案上捎带,这个configuration存储使得文件名可以通过req.params.filename
明确设置,如果没有提供,默认为现有的名称。
configuration-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 }; }