Teamlinker/code/server/file/http/file.ts
sx1989827 ff4db586b3 init
2023-05-27 20:53:32 +08:00

53 lines
1.9 KiB
TypeScript

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<typeof fileApi.routes.upload.res>{
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<typeof fileApi.routes.getPath.res> {
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
}
}
}