const {handle, handleAll} = require('../tools/handle_cjs'); const d_base = require("../database/d_base"); const codeMap = require("../map/rcodeMap"); const dbField = require("../map/dbField"); const {searchHandle} = require("../tools/searchSql"); const {isEmpty} = require("../tools/typeTool_cjs"); const config_path = require("../configs/path"); const {isArray} = require("ant-design-vue/lib/_util/vue-types/utils"); const {mvFile, rmFile} = require("../tools/saveFiles_cjs"); const {getUnixTimeStamp} = require("../tools/time_cjs"); const {filePathToUrl} = require("../tools/filePathTool"); const log = require("../logger").logger("c_base","info"); async function getCarousel(){ let err,res; [err,res] = await handle(d_base.getCarousel()); // console.log(res); if(err){ return [err,null]; } // 路径转换 res = res.map(item=>{ item.filePath = filePathToUrl(item.fileType,item.filePath); return item; }); return [null,res]; } /** * 文件上传 * @param type * @param files * @returns {Promise<[{eMsg: string, eCode: number},null]|*[][]|[{eMsg: string, eCode: *},null]|*[]>} */ async function uploadFile(type, files){ // 文件类型一般不会被改变,只移动文件至对应的存储目录,并将路径存储到数据库中.只存储文件名 let err,res,newFileName; let uploadPath = config_path.files; let fileNameArr = [];// 文件存储路径数组 // 文件转存,使用newFileName作为路径 if(type === dbField.db_base.fileType.image){ uploadPath = config_path.images; }else if(type === dbField.db_base.fileType.video){ uploadPath = config_path.videos; } let keys = Object.keys(files); // 遍历转移文件 for(let fileKey of keys){ let file = files[fileKey]; // 判断当前文件是否为数组 if(!file.newFilename && file.length){ for(let f of file){ // console.log(f); // console.log(f.newFilename); log.info(`[文件上传] 开始移动文件 ${f.newFilename} to ${uploadPath}`); [err,newFileName] = await mvFile(f,uploadPath, f.newFilename); if(err){ return [err,null]; } // console.log('移动文件成功' + newFileName); fileNameArr.push(newFileName); } }else if(file.newFilename){ [err,newFileName] = await mvFile(file,uploadPath,file.newFilename); if(err){ return [err,null]; } fileNameArr.push(newFileName); }else{ // 文件调用异常 log.error(`[文件上传] 文件调用异常,fileObj\n: ${JSON.stringify(file)}`); return [ { eCode:codeMap.ServerError, eMsg:`文件调用异常` },null]; } } // 存储至数据库 // console.log(type); [err,res] = await handle(d_base.uploadFiles(type,fileNameArr,getUnixTimeStamp())); if(err){ log.error(`[文件上传] 文件入库失败 ${err.message}`); return [{eCode: codeMap.SaveError,eMsg: `文件存储失败!!!`},null]; } log.info(`[文件上传] 文件上传成功 ${res.affectedRows}`); return [null,fileNameArr]; } /** * 搜索文件 * @param type * @param key * @param l * @param p * @returns {Promise} */ async function searchFiles(type = 0, key, l, p){ let err,res; let _params = { key: key, } // console.log(type); // type为 数据库值加一,因为数据库中存储值从0开始,而前端显示从1开始 if((type - 1) !== dbField.db_base.fileType.all){ _params.type = type; } // console.log(_params); [err,res] = await searchHandle('搜索文件失败', d_base.loadFiles, _params, l, p); if(err){ log.info(`[文件资源] 加载失败 ${err.eDetail||err.message}`) return [err,null]; } // console.log(res); res.arr = res.arr.map(item=>{ console.log(item); item.filePath = filePathToUrl(item.fileType,item.filePath); return item; }); return [null,res]; } async function deleteFile(fileId){ let err,res,rmRes; // 获取文件信息 [err,res] = await handle(d_base.getFileById(fileId)); if(err){ log.info(`[文件资源] 获取文件信息失败 ${err.message}`); return [{eCode:codeMap.ServerError,eMsg:`删除文件失败,无法查找文件`},null]; } if(!res.length){ log.info(`[文件资源] 获取文件信息失败,无法找到文件`); return [{eCode:codeMap.NotFound,eMsg:`删除文件失败,无法查找文件`},null]; } let fileData = res[0]; let filePath = filePathToUrl(fileData.fileType,fileData.filePath); [err,res,rmRes] = await handleAll(d_base.deleteFile(fileId),rmFile(filePath)); if(err){ console.log(err); log.info(`[文件资源] 删除文件${fileId}失败 ${err.message}`); return [{eCode:codeMap.SaveError,eMsg:`删除文件失败`},null]; } return [null,true]; } module.exports = { getCarousel, uploadFile, searchFiles, deleteFile }