NestJS 中的 FileInterceptor 和 Body 问题(在请求中上传文件和数据)

Rat*_*r97 2 postman nestjs nestjs-swagger

我有以下控制器:

createCollection(
    @UploadedFile() file,
    @Body() createCollectionDto: CreateCollectionDto,
    @GetUser() user: User,
  ): Promise<Collection> {
    this.logger.verbose(
      `User "${
        user.username
      }" creating a new collection. Data: ${JSON.stringify(
        createCollectionDto,
      )} of "${user.username}"`,
    );
    if (file) {
      return this.collectionService.createCollection(
        createCollectionDto,
        user,
        file,
      );
    } else {
      throw new InternalServerErrorException('File needed');
    }
  }
Run Code Online (Sandbox Code Playgroud)

我需要上传一个文件并在同一个查询中提供一些数据。 我想提供给 api 的数据

因为我要上传文件,所以我这样设置Postman: 邮递员的第二个设置

第一个问题:如何将文件连同图n°1中显示的数据一起发送?

我搜索了另一个 API 请求工具,我找到了Postwoman

这是我使用的配置: 邮递员配置

但响应总是相同的:它不检测数据。(即{ name: foo, color: bar}

在此处输入图片说明

第二个问题:我该如何解决这个问题?是否可以将数据放在文件中?如果有可能,我如何在 NestJS 中实现这一目标?

非常感谢您阅读我的问题:) 任何帮助将不胜感激。

Pau*_*est 7

你很接近。要在 Postman 的单个请求中上传文件和额外属性,您需要选择form-data不是 x-www-form-urlencoded

邮递员截图

这是一个简单的 NestJS 控制器,它显示您可以获得所有数据:

import { Body, Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';

@Controller('upload-stack-overflow')
export class UploadStackOverflowController {

  @Post('upload')
  @UseInterceptors(FileInterceptor('file'))
  uploadSingleFileWithPost(@UploadedFile() file, @Body() body) {
    console.log(file);
    console.log(body.firstName);
    console.log(body.favoriteColor);
  }
}
Run Code Online (Sandbox Code Playgroud)