@riturajgc/upload-manager-service
Version:
Upload manager service for bitnudge
112 lines (102 loc) • 3.58 kB
JavaScript
const sharp = require('sharp');
const md5File = require('md5-file');
const _ = require('lodash');
const { errorObject } = require("./../lib/utils/index.js");
const createThumbnail = async(model,document,fileName,filePath,size) => {
try{
if(!filePath || !size){
return {status:false,message:"Please provide valid fields"};
}
return sharp(filePath).rotate().resize(size).toBuffer().then( thumbnailData => {
saveData(model,document,fileName,thumbnailData);
}).catch( err => {
console.error("Error in createThumbnail",err);
});
}catch(err){
console.error("Error in createThumbnail",err);
}
};
const saveData = async(model,document,fileName,thumbnailData) => {
const result = await model.update({
_id:document._id
},{
$set:{
thumbnail:{
name:fileName,
content:thumbnailData,
},
isThumbnailAvailable:true
}
})
}
const createHash = async(filePath) => {
if(!filePath){
return errorObject({message:"Please provide valid fields"});
}
const hash = md5File.sync(filePath);
return {status:true,data:hash};
};
const getInBytes = (size) => {
let sizeInBytes = 0;
const mult = 1024;
if(size && size.toLowerCase().endsWith('kb')){
sizeInBytes = parseFloat(size.replace('kb','')) * mult;
}else if(size && size.toLowerCase().endsWith('mb')) {
sizeInBytes = parseFloat(size.replace('mb', '')) * mult * mult;
}
return sizeInBytes;
};
const isValidImage = (imageParameter, thresholds) => {
let message = "";
let threshold = thresholds.find((threshold) => {
return threshold.fileType.includes(imageParameter.type.toString());
});
if(imageParameter.height < threshold.validation.minHeight){
message = `${threshold.errorMessages.errMsgMinHeight}`;
}
if(imageParameter.height > threshold.validation.maxHeight){
message += `${message?', ':''}${threshold.errorMessages.errMsgMaxHeight}`;
}
if(imageParameter.width < threshold.validation.minWidth){
message += `${message?', ':''}${threshold.errorMessages.errMsgMinWidth}`;
}
if(imageParameter.width > threshold.validation.maxWidth){
message += `${message?', ':''}${threshold.errorMessages.errMsgMaxWidth}`;
}
const minSize = getInBytes(threshold.validation.minSize);
const maxSize = getInBytes(threshold.validation.maxSize);
if(imageParameter.size < minSize){
message += `${message?', ':''}${threshold.errorMessages.errMsgMinSize}`;
}
if(imageParameter.size > maxSize){
message += `${message?', ':''}${threshold.errorMessages.errMsgMaxSize}`;
}
if(message){
return errorObject({ message });
}
return {status:true};
};
const isValidFileSize = ({size,fileType, thresholds}) => {
let message = "";
const threshold = thresholds.find((threshold) => {
return threshold.fileType.includes(fileType.toString());
});
const minSize = getInBytes(threshold.validation.minSize);
const maxSize = getInBytes(threshold.validation.maxSize);
if(size < minSize){
message += `${message?', ':''}${threshold.errorMessages.errMsgMinSize}`;
}
if(size > maxSize){
message += `${message?', ':''}${threshold.errorMessages.errMsgMaxSize}`;
}
if(message){
return errorObject({ message });
}
return {status:true};
}
module.exports = {
createThumbnail,
createHash,
isValidImage,
isValidFileSize
};