flexbiz-server
Version:
Flexible Server
12 lines (11 loc) • 5.24 kB
JavaScript
const path=require("path"),fs=require("fs"),ffmpeg=require("fluent-ffmpeg"),ffmpegInstaller=require("@ffmpeg-installer/ffmpeg");ffmpeg.setFfmpegPath(ffmpegInstaller.path);
const sharp=require("sharp"),watermark=require("dynamic-watermark"),setWaterMark4Image=async($app_info$$,$file_name$$,$extension_root$$,$recache$$)=>{let $file_name_watermark$$=`${$file_name$$}.watermark.${$extension_root$$}.webp`;if(!$app_info$$.logo_watermark)return $file_name$$;if(!$recache$$&&fs.existsSync($file_name_watermark$$))return $file_name_watermark$$;$extension_root$$=configs.paths.images;$extension_root$$||($extension_root$$=__dirname,$extension_root$$=path.dirname($extension_root$$),
$extension_root$$=path.dirname($extension_root$$),$extension_root$$=path.join($extension_root$$,"images"));let $file_logo$$=path.join($extension_root$$,$app_info$$.logo_watermark.split("getfile/")[1]);return fs.existsSync($file_logo$$)?new Promise($resolve$$=>{sharp($file_name$$,{failOnError:!1}).metadata().then($value$$=>{const $watermark_size$$=$value$$.width*10/100;watermark.embed({type:"image",source:$file_name$$,logo:$file_logo$$,destination:$file_name_watermark$$,position:{logoX:$value$$.width-
$watermark_size$$-10,logoY:10,logoHeight:$watermark_size$$,logoWidth:$watermark_size$$}},function($status$$){$status$$.status===1?$resolve$$($file_name_watermark$$):(Logger.info("status set watermark",$status$$),$resolve$$($file_name$$))})}).catch($error$$=>{Logger.info($error$$);return $resolve$$($file_name$$)})}):(Logger.info("file logo watermark is not exists",$file_logo$$),$file_name$$)},configResizeImage=async($_size_file_name_resize$$,$file_name$$,$extension$$,$recache$$)=>{let $size$$,$cache$$;
if($_size_file_name_resize$$)switch($_size_file_name_resize$$.toString().toUpperCase()){case "64":case "X":$size$$=64;$cache$$=!0;break;case "256":$size$$=256;$cache$$=!0;break;case "S":case "320":$size$$=320;$cache$$=!0;break;case "512":case "M":$size$$=512;$cache$$=!0;break;case "1024":case "L":$size$$=1024;$cache$$=!0;break;case "1080":case "FULLHD":$size$$=1080;$cache$$=!0;break;case "1440":case "2K":$size$$=1440;$cache$$=!0;break;default:try{$size$$=Number($_size_file_name_resize$$)}catch($e$$){Logger.info("size param must be X or S or M or L or a number")}}return $size$$?
($_size_file_name_resize$$=`${$file_name$$}.${$size$$}.${$extension$$}.webp`,!$recache$$&&fs.existsSync($_size_file_name_resize$$)?{file_name_resize:$_size_file_name_resize$$,exist:!0}:{cache:$cache$$,size:$size$$,file_name_resize:$_size_file_name_resize$$}):{file_name_resize:$file_name$$}};
module.exports=function($router$$){$router$$.route("/file/shared/:id").get(($req$$,$res$$)=>{let $id$$=$req$$.params.id,$size$$=$req$$.query.size||$req$$.query.resize||"FULLHD";if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(400).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y file n\u00e0y"});global.getModel("file").findOne({_id:$id$$}).lean().exec(async($e$jscomp$1_extension$$,$_new_file_orgin_file_size_rs$$)=>{if($e$jscomp$1_extension$$)return $res$$.status(400).send($e$jscomp$1_extension$$);
if($_new_file_orgin_file_size_rs$$){if(!$_new_file_orgin_file_size_rs$$.shared)return $res$$.status(403).send({error:"Kh\u00f4ng th\u1ec3 truy c\u1eadp file n\u00e0y"});let $app_info$$=await global.getModel("app").findOne({_id:$_new_file_orgin_file_size_rs$$.id_app}).lean();$app_info$$||={};if($_new_file_orgin_file_size_rs$$.file.url)return $res$$.redirect($_new_file_orgin_file_size_rs$$.file.url);let $file_name$$=$_new_file_orgin_file_size_rs$$.file.name;$e$jscomp$1_extension$$=$_new_file_orgin_file_size_rs$$.file.extension;
let $root$$=configs.paths.uploads;$root$$||($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$file_name$$=path.join($root$$,$file_name$$);if(fs.existsSync($file_name$$))if(["png","jpg","jpeg","webp"].indexOf($e$jscomp$1_extension$$)>=0){$_new_file_orgin_file_size_rs$$=await setWaterMark4Image($app_info$$,$file_name$$,$e$jscomp$1_extension$$,$req$$.query.recache);let $_resize_conf$$=await configResizeImage($size$$,$_new_file_orgin_file_size_rs$$,
$e$jscomp$1_extension$$,$req$$.query.recache);if($_resize_conf$$.exist)return sharp($_resize_conf$$.file_name_resize,{failOnError:!1}).pipe($res$$);let $_gm$$=sharp($_new_file_orgin_file_size_rs$$,{failOnError:!1});($_new_file_orgin_file_size_rs$$=await $_gm$$.metadata())&&$_resize_conf$$.size&&$_resize_conf$$.size<$_new_file_orgin_file_size_rs$$.width&&$_resize_conf$$.size<$_new_file_orgin_file_size_rs$$.height&&($_gm$$=$_gm$$.resize({width:$_resize_conf$$.size}).rotate());$_new_file_orgin_file_size_rs$$&&
$_new_file_orgin_file_size_rs$$.format!="webp"&&($_gm$$=$_gm$$.webp({lossless:!1}));$_resize_conf$$.cache&&setImmediate(()=>{$_gm$$.toFile($_resize_conf$$.file_name_resize,$error$$=>{if($error$$)return Logger.error("save cache image:",$error$$.message);Logger.info("cache file",$_resize_conf$$.file_name_resize)})});$_gm$$.pipe($res$$)}else $res$$.download($file_name$$,$_new_file_orgin_file_size_rs$$.file.originalname);else $res$$.status(400).send({error:"File n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i"})}else $res$$.status(400).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y file n\u00e0y"})})})};