如何使用 multer 限制 NestJS 中上传文件的总大小?

问题描述 投票:0回答:1

我正在开发一个应用程序,用户可以在其中上传多个文件,然后将这些文件作为附件添加到电子邮件中。我可以使用多个选项限制每个文件的文件大小。但是我不能为字段总数设置限制。

限制文件总大小的最佳做法是什么?

这是我解析传入文件的方式:

@Post('send')
@UseInterceptors(
AnyFilesInterceptor({ limits: { fileSize: 2 \* 1024 \* 1024 } }),
)
sendEmailWithAttachment(
@Body() sendEmailPayload: SendEmailPayload,
@UploadedFiles() files: Array\<Express.Multer.File\>,
) {

出于演示目的,我添加了 2mb 限制。

我可以写一个服务级别的函数来检查文件大小的总和,但它似乎不太可行。

validation upload nestjs size multer
1个回答
0
投票

您可以使用 Nest Guard 来执行此逻辑,例如:

@Injectable()
export class FileSizeGuard implements CanActivate {
  constructor(private readonly maxTotalSize: number) {}

  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    const request = context.switchToHttp().getRequest();
    const files: Express.Multer.File[] = request.files;
    const totalSize = files.reduce((acc, file) => acc + file.size, 0);
    if (totalSize > this.maxTotalSize) {
      return false;
    }
    return true;
  }
}

然后在你的控制器端点上使用这个守卫:

@Post('send')
@UseGuards(new FileSizeGuard(10 * 1024 * 1024)) // limit total size to 10MB
...
© www.soinside.com 2019 - 2024. All rights reserved.