演示

FileService

文件上传、元数据与存储(本地或 S3),包含预签名下载 URL。

注入

TSXinject
1import { 2 ContainerRegistryManager, 3 FileService, 4 Inject, 5 Service, 6} from "@quan-erp/shared-backend-core"; 7 8@Service() 9export class MyPluginService { 10 @Inject(FileService, ContainerRegistryManager.BUILTIN_PLUGIN) 11 private fileService: FileService; 12}

addFile(options)

将临时上传移入存储并写入 FileEntity。

  • tempFilePath / originalName / mimeType — 上传信息
  • metadata / creatorId — 元数据与上传者
  • type: FileStorageType — LOCAL 或 S3
  • fileAccess / accessRole — 访问策略
  • compression? — 可选
TSXaddFile
1import { 2 ContainerRegistryManager, 3 FileAccess, 4 FileService, 5 FileStorageType, 6 Inject, 7 Service, 8} from "@quan-erp/shared-backend-core"; 9 10@Service() 11export class AttachmentService { 12 @Inject(FileService, ContainerRegistryManager.BUILTIN_PLUGIN) 13 private fileService: FileService; 14 15 async storeUpload(tempPath: string, userId: number) { 16 return this.fileService.addFile({ 17 tempFilePath: tempPath, 18 originalName: "invoice.pdf", 19 mimeType: "application/pdf", 20 metadata: { source: "invoice-upload" }, 21 creatorId: userId, 22 type: FileStorageType.LOCAL, 23 fileAccess: FileAccess.PRIVATE, 24 accessRole: [], 25 }); 26 } 27}

其他方法

  • findFile(filename) — 按文件名取元数据
  • getFiles(skip, limit) — 分页列表
  • deleteFile(id) — 删除存储对象与数据库行
  • generatePreSignedUrl(file, expiresInSeconds, mimeType) — 临时下载 URL
TSXdownload
1import { 2 ContainerRegistryManager, 3 FileService, 4 Inject, 5 Service, 6} from "@quan-erp/shared-backend-core"; 7 8@Service() 9export class FileLinkService { 10 @Inject(FileService, ContainerRegistryManager.BUILTIN_PLUGIN) 11 private fileService: FileService; 12 13 async temporaryLink(filename: string, mimeType: string) { 14 return this.fileService.generatePreSignedUrl( 15 filename, 16 60 * 15, 17 mimeType 18 ); 19 } 20}