import {ECommon_Model_File_Type} from '../../../common/model/file'; import fileApi from "../../../common/routes/file"; import {Err} from '../../../common/status/error'; import {DComponent} from "../../common/decorate/component"; import {DHttpApi, DHttpController, DHttpReqParamRequired, DHttpUser} from "../../common/http/http"; import {IServer_Common_Http_Req_File} from "../../common/types/http"; import FileService from "../service/file"; import {IUserSession} from "../../user/types/config"; import {REDIS_FILE} from "../../common/cache/keys/file"; @DComponent @DHttpController(fileApi) class AdminController { @DHttpApi(fileApi.routes.upload) async upload(@DHttpReqParamRequired("file") file:IServer_Common_Http_Req_File,@DHttpUser user:IUserSession):Promise{ let obj=await FileService.getItemByMd5(file.md5) if(obj) { return { id:obj.getItem().id } } else { let objFile=new FileService() objFile.assignItem({ created_by_pure:user.userId, size:file.size, type:ECommon_Model_File_Type.LOCAL, md5:file.md5 }) let ret=await objFile.upload(file) return { id:ret } } } @DHttpApi(fileApi.routes.getPath) async getPath(@DHttpReqParamRequired("fileId") fileId:string):Promise { let path:string let objCache=REDIS_FILE.filePath(fileId) path=await objCache.get() if(!path) { let obj=await FileService.getItemById(fileId) if(!obj) { throw Err.File.fileNotFound } else { path=obj.getItem().path } await objCache.set(path) } return { uri:"/file"+path } } }