Ошибка загрузки файла с использованием Angular 6 и Nestjs - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь загрузить файл на сервер nest.js, но получаю сообщение об ошибке:

Ошибка: неподдерживаемый тип носителя: multipart / form-data; граница = -------------------------- 140603536005099484714904

Error File

Я следовал этой документации .

Угловой 6 код

public async Upload<TReponse>(file: File, path) {
    try {

      const formData = new FormData();
      formData.append("file", file);

      //>> function to upload and applying header as null

      const result = await this.http.post(this.baseUrl + path, formData, { headers: null }).pipe(map((response: any) => response)).toPromise();
      var response = result as ApiResponseObject<TReponse>;

      return response;
    }
    catch (ex) {
      var result = new ApiResponseObject<TReponse>()
      result.message = ex.message;
      result.isSuccess = false;

      return result;
    }
    finally {
    }
 }

Код модуля NestJs Код

import { Module, NestModule, MiddlewareConsumer, MulterModule } from '@nestjs/common';
import { UserService } from './services/user.service';
import { UserController } from './user.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './dto/user.entity';
import * as multer from 'multer';

@Module({
    imports: [TypeOrmModule.forFeature([User]),
    MulterModule.register({
        dest: '/public',
        fileFilter: (req, file, cb) => {
            let extension = (file.originalname.split('.').pop())
            //Put here your custom validation for file extensións.
            // To accept the file pass `true`, like so:
            cb(null, true);
            // To reject this file pass `false` or throw Exception, like so:
            //cb(new HttpException ("File format is not valid", HttpStatus.BAD_REQUEST), false)
        },
        limits: {
            fileSize: 2097152 //2 Megabytes
        },
        storage: multer.diskStorage({
            destination(req, file, cb) {
                cb(null, './public');
            },
            filename(req, file, cb) {
                cb(null, "usman_" + file.originalname);
            },
        })
    }),
    ],
    providers: [UserService],
    controllers: [UserController],
})

Код NestJs Код компонента

@Post("upload")
@UseInterceptors(FileInterceptor('file'))
async upload(@UploadedFile() file, @Request() req) {
    console.log(file);
    console.log(req.files);
}

1 Ответ

0 голосов
/ 21 января 2019

Я предполагаю, что вы используете FastifyAdapter вместо экспресс. В документации сказано:

Multer не будет обрабатывать любые формы, которые не являются составными (Многочастному / форм-данных). Кроме того, этот пакет не будет работать с FastifyAdapter.

Так что, если возможно, переключитесь на экспресс. В противном случае вам придется использовать Fastify-Multipart , пока он не будет изначально поддерживаться nest.js.

...