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

Posted

技术标签:

【中文标题】NestJS 中的 FileInterceptor 和 Body 问题(在请求中上传文件和数据)【英文标题】:FileInterceptor and Body Issue in NestJS (upload a file and data in a request) 【发布时间】:2020-07-23 17:08:19 【问题描述】:

我有以下控制器:

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');
    
  

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

因为我要上传文件,所以我这样设置 Postman:

第一个问题:如何发送文件以及图片n°1中显示的数据

我搜索了另一个 API 请求工具,发现 Postwoman

这是我使用的配置:

但是响应总是一样的:它没有检测到数据。 (即 name: foo, color: bar

第二个问题:我该如何解决这个问题?是否可以将数据放在文件中?如果可能的话,我怎样才能在 NestJS 中实现呢?

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

【问题讨论】:

【参考方案1】:

你已经很接近了。要在 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 Upload***Controller 

  @Post('upload')
  @UseInterceptors(FileInterceptor('file'))
  uploadSingleFileWithPost(@UploadedFile() file, @Body() body) 
    console.log(file);
    console.log(body.firstName);
    console.log(body.favoriteColor);
  

【讨论】:

我发现了问题,谢谢,一如既往这是一个愚蠢的错误:我期待“图像”,但在邮递员中我给了名称“文件” 如何使用nestjs在数据库中的同一请求中上传数据和文件。你能帮我解决这个问题吗? ***.com/questions/69849722/…

以上是关于NestJS 中的 FileInterceptor 和 Body 问题(在请求中上传文件和数据)的主要内容,如果未能解决你的问题,请参考以下文章

在 Nestjs 问题中读取对象值

无法使用 NestJs 和 Multer 上传文件

nestjs 文件上传

NestJS:解决 NestMiddleware 中的依赖关系?

Nestjs中的MissingSchemaError

nestjs 中的多个全局前缀