| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 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<err[]|{arr, total: number, limit, page}[]>}
- */
- 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
- }
|