nestjs 文件上传

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nestjs 文件上传相关的知识,希望对你有一定的参考价值。

参考技术A

文件上传需要使用 拦截器 UseInterceptors 在\'@nestjs/common\'包内

拦截器功能参考: https://docs.nestjs.cn/7/interceptors

单文件上传

所需依赖有 FileInterceptor , UploadedFile

FileInterceptor 是拦截器负责处理请求接口后的文件 再使用UploadedFile 进行接受

多文件上传

所需依赖有 FilesInterceptor , UploadedFiles

基本操作与单文件上传一致 但注意依赖名不同,多文件上传有复数s

多文件上传自定义多个键名

所需依赖有 FileFieldsInterceptor , UploadedFiles

与上述操作基本不变 仅拦截方法变更,需要传入参数名数组

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

【中文标题】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 文件上传的主要内容,如果未能解决你的问题,请参考以下文章

如何使用nestJS将文件上传到mongoose上的mongodb?

NestJS - 文件上传到微服务

如何使用 nestjs-graphql-fastify 服务器上传文件以及如何测试此类功能?

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

NestJS 使用 GraphQL 上传 [关闭]

是否可以通过 storagenestJS sdk 上传带有元数据的文件?