You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NestJS+TypeORM将文件上传存储到PostgreSQL数据库

所需调整步骤

  • 安装依赖(如果未安装)
    NestJS默认依赖@nestjs/platform-express已经包含文件上传所需的multer封装,无需额外安装第三方包。如果你的项目是自定义适配器,可单独安装@types/multer获得类型提示:
npm i -D @types/multer
  • 调整实体类(可选但推荐)
    补充文件名、文件MIME类型字段,方便后续下载文件时返回正确的响应头:
// 在Certificate实体中新增两个字段
@ApiProperty()
@Column({ type: 'varchar', length: 200, nullable: true })
fileName: string;

@ApiProperty()
@Column({ type: 'varchar', length: 100, nullable: true })
fileType: string;

// 原有attachFile字段保留即可
@ApiProperty()
@Column({ type: 'bytea' })
attachFile: Uint8Array;
  • 修改控制器逻辑
    原控制器仅支持JSON格式请求,文件上传需要使用multipart/form-data格式,需引入文件拦截器处理上传的文件:
import { Controller, Post, Body, UseInterceptors, UploadedFile } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';

@Post()
@UseInterceptors(FileInterceptor('attachFile')) // 这里的attachFile对应前端form-data里的文件字段名
create(
  @Body() createCertificateDto: CreateCertificateDto,
  @UploadedFile() file: Express.Multer.File
): Promise<Certificate> {
  // 将文件的二进制内容、文件名、文件类型合并到DTO中
  const payload = {
    ...createCertificateDto,
    attachFile: file.buffer, // multer拿到的file.buffer直接是Uint8Array格式,匹配实体字段类型
    fileName: file.originalname,
    fileType: file.mimetype
  };
  return this.certificatesService.create(payload);
}
  • 调整DTO定义
    在CreateCertificateDto中移除attachFile字段的前端校验规则,该字段由后端赋值,无需前端传递:
// CreateCertificateDto示例
export class CreateCertificateDto {
  // 原有其他字段的校验规则保留
  statusOfReport: string;
  sponser: string;
  // ... 其他字段都保持不变
  // 去掉attachFile字段的定义,或者标记为可选且不需要前端传递
}
  • 大文件优化提示(可选)
    如果需要上传超过10MB的文件,可以在主模块中调整multer的文件大小限制:
// 在main.ts中配置全局body解析限制
app.useBodyParser('json', { limit: '50mb' });
app.useBodyParser('urlencoded', { extended: true, limit: '50mb' });
// 或者在FileInterceptor中单独配置大小限制
@UseInterceptors(FileInterceptor('attachFile', {
  limits: { fileSize: 50 * 1024 * 1024 } // 限制最大50MB
}))

验证方式

调用接口时选择multipart/form-data格式请求:

  • 普通字段直接填对应文本值
  • attachFile字段选择本地文件上传即可

内容的提问来源于stack exchange,提问作者Shruti sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:36:03