小编Lys*_*tte的帖子

Nestjs 使用 @UploadedFile 装饰器上传文件:如何使参数非强制?

使用 Nest.js,我尝试为我的膳食计划应用程序中的一种成分编写一条创建(发布)路线。该路由将接收描述(可选)和名称(强制)作为请求正文,以及可选图像。我使用 Objection.js 作为 ORM。

我阅读了有关使用 Multer 处理文件上传 Nest.js 文件上传的 Nest.js 文档,并尝试按照文档中的方式进行操作。问题是,我在任何地方都找不到如何使用 UploadedFile 装饰器同时使文件可选。当我尝试通过 Postman 创建没有图像的新成分时,收到以下错误消息:

{
    "statusCode": 400,
    "message": "File is required",
    "error": "Bad Request"
}
Run Code Online (Sandbox Code Playgroud)

有人在这里偶然发现过这个问题并找到了使参数可选的解决方案吗?我知道我可以创建一个补丁路径来修改成分并在之后添加图像作为解决方法,但我想知道在保持实际情况的同时是否可以做些什么。

这是我的控制器的代码:

@Post()
  @UseInterceptors(
    FileInterceptor('image', {
      storage: diskStorage({
        destination: './assets/images/ingredient',
        filename: getUniqueFileName,
      }),
    }),
  )
  @UseFilters(DeleteFileOnErrorFilter)
  async create(
    @Body() dto: CreateIngredientDto,
    @UploadedFile(
      new ParseFilePipe({
        validators: [new FileTypeValidator({ fileType: '.(png|jpeg|jpg)' })],
      }),
    )
    image?: Express.Multer.File,
  ): Promise<IngredientModel> {
    return this.ingredientService.create(dto, image);
  }
Run Code Online (Sandbox Code Playgroud)

以及从 Service 调用的 create 方法:

async create(
    dto: CreateIngredientDto,
    image?: Express.Multer.File, …
Run Code Online (Sandbox Code Playgroud)

file-upload typescript multer nestjs

2
推荐指数
1
解决办法
3749
查看次数

标签 统计

file-upload ×1

multer ×1

nestjs ×1

typescript ×1