UNPKG

@riturajgc/upload-manager-service

Version:

Upload manager service for bitnudge

112 lines (102 loc) 3.58 kB
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.updateOne({ _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 };