FileInterceptor и Body Issue в гнезде JS (загрузить файл и данные в запросе) - PullRequest
1 голос
/ 11 апреля 2020

У меня есть следующий контроллер:

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

Мне нужно загрузить файл и в том же запросе дать некоторые данные. data I want to give to the api

Поскольку я хочу загрузить файл, я настроил Почтальон так: second setup of postman

Первый вопрос : Как я могу отправить файл вместе с данными , показанными на рисунке № 1?

Я искал другой инструмент для запросов API и нашел Почтальон

Вот конфигурация, которую я использовал: Postwoman config

Но ответ всегда одинаков: он не обнаруживает данные. (т.е. { name: foo, color: bar})

enter image description here

Второй вопрос : Как я могу решить эту проблему? Можно ли поместить данные в файл? Если это возможно, как я могу добиться этого в Nest JS?

Большое спасибо за чтение моего вопроса :) Любая помощь будет оценена.

1 Ответ

1 голос
/ 12 апреля 2020

Ты довольно близко. Чтобы загрузить файл и дополнительные свойства в одном запросе в Postman, вам нужно , чтобы выбрать form-data и , а не x-www-form-urlencoded.

Screenshot of Postman

А вот простой контроллер Nest JS, который показывает, что вы можете получить все данные:

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);
  }
}
...