file.entity.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn } from 'typeorm';
  2. import { UserEntity } from '@/server/modules/users/user.entity';
  3. import process from 'node:process';
  4. @Entity('file')
  5. export class File {
  6. @PrimaryGeneratedColumn({ name: 'id', type: 'int', unsigned: true })
  7. id!: number;
  8. @Column({ name: 'name', type: 'varchar', length: 255 })
  9. name!: string;
  10. @Column({ name: 'type', type: 'varchar', length: 50, nullable: true, comment: '文件类型' })
  11. type!: string | null;
  12. @Column({ name: 'size', type: 'int', unsigned: true, nullable: true, comment: '文件大小,单位字节' })
  13. size!: number | null;
  14. @Column({ name: 'path', type: 'varchar', length: 512, comment: '文件存储路径' })
  15. path!: string;
  16. // 获取完整的文件URL(包含MINIO_HOST前缀)
  17. // get fullUrl(): string {
  18. // const protocol = process.env.MINIO_USE_SSL !== 'false' ? 'https' : 'http';
  19. // const port = process.env.MINIO_PORT ? `:${process.env.MINIO_PORT}` : '';
  20. // const host = process.env.MINIO_HOST || 'localhost';
  21. // const bucketName = process.env.MINIO_BUCKET_NAME || 'd8dai';
  22. // return `${protocol}://${host}${port}/${bucketName}/${this.path}`;
  23. // }
  24. get fullUrl(): Promise<string> {
  25. return new Promise((resolve) => {
  26. // 这里可以执行异步操作
  27. const protocol = process.env.MINIO_USE_SSL !== 'false' ? 'https' : 'http';
  28. const port = process.env.MINIO_PORT ? `:${process.env.MINIO_PORT}` : '';
  29. const host = process.env.MINIO_HOST || 'localhost';
  30. const bucketName = process.env.MINIO_BUCKET_NAME || 'd8dai';
  31. resolve(`${protocol}://${host}${port}/${bucketName}/${this.path}`);
  32. });
  33. }
  34. @Column({ name: 'description', type: 'text', nullable: true, comment: '文件描述' })
  35. description!: string | null;
  36. @Column({ name: 'upload_user_id', type: 'int', unsigned: true })
  37. uploadUserId!: number;
  38. @ManyToOne(() => UserEntity)
  39. @JoinColumn({ name: 'upload_user_id', referencedColumnName: 'id' })
  40. uploadUser!: UserEntity;
  41. @Column({ name: 'upload_time', type: 'datetime' })
  42. uploadTime!: Date;
  43. @Column({ name: 'last_updated', type: 'datetime', nullable: true, comment: '最后更新时间' })
  44. lastUpdated!: Date | null;
  45. @Column({ name: 'created_at', type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
  46. createdAt!: Date;
  47. @Column({
  48. name: 'updated_at',
  49. type: 'timestamp',
  50. default: () => 'CURRENT_TIMESTAMP',
  51. onUpdate: 'CURRENT_TIMESTAMP'
  52. })
  53. updatedAt!: Date;
  54. }