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 问题(在请求中上传文件和数据)的主要内容,如果未能解决你的问题,请参考以下文章