【问题标题】:ParseFilePipe validator for FileType validator returns error even with correct fileFileType 验证器的 ParseFilePipe 验证器即使文件正确也会返回错误
【发布时间】:2022-11-09 05:05:05
【问题描述】:

我用邮递员发送带有表单数据的两个文件,无论我发送哪种类型的文件总是返回错误

代码:

@Public()
@Post()
@ApiOperation({ summary: 'Create driver' })
@UseInterceptors(FileFieldsInterceptor([
{ name: 'cedula', maxCount: 1 },
{ name: 'proceedings', maxCount: 1 },
],

))
create(
@Body() createDriverDto: CreateDriverDto,
@UploadedFiles(new ParseFilePipe({ validators:  [new FileTypeValidator({fileType: 'jpg'})]}))
files: { cedula?: Express.Multer.File[], proceedings?: Express.Multer.File[] }) {
console.log(files.cedula);

return this.driverService.create(createDriverDto, files);
}

postman error

【问题讨论】:

  • here's 将针对您的文件运行的方法的来源。看起来 file.mimeType'jpg' 不匹配
  • 我相信 mime 类型是 image/jpeg,请尝试使用 'jpeg'

标签: nestjs backend dto


【解决方案1】:

我解决了这个问题,添加了帮助程序来验证文件,这里是代码:

控制器:

@Patch('/uploadfiles/:id')
@ApiOperation({
  summary: 'Upload driver files'
})
@UseInterceptors(FileFieldsInterceptor([{
    name: 'dniFront',
    maxCount: 1
  },
  {
    name: 'dniBack',
    maxCount: 1
  },
  {
    name: 'driverLicenseFront',
    maxCount: 1
  },
  {
    name: 'driverLicenseBack',
    maxCount: 1
  },
  {
    name: 'proceedings',
    maxCount: 1
  },
  {
    name: 'selfie',
    maxCount: 1
  }
], {
  fileFilter: fileFilter,
}))
uploadFiles(
  @Param('id', ParseUUIDPipe) id: string,
  @UploadedFiles() files: {
    proceedings: Express.Multer.File[],
    dniFront: Express.Multer.File[],
    dniBack: Express.Multer.File[],
    driverLicenseFront: Express.Multer.File[],
    driverLicenseBack: Express.Multer.File[],
    selfie: Express.Multer.File[]
  }) {
  return this.driverService.uploadFiles(id, files)
}

帮手:

import {
  HttpException,
  HttpStatus
} from '@nestjs/common';


export const fileFilter = (req: Express.Request, file: Express.Multer.File,
  callback: Function) => {
  const fileExtension = file.mimetype.split('/')[1];
  const validFiles = ['jpg', 'jpeg', 'png', 'pdf']
  if (validFiles.some(el => fileExtension.includes(el))) return callback(null, true)
  return callback(new HttpException(`${file.fieldname} is not a valid document`, HttpStatus.UNPROCESSABLE_ENTITY), false)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2015-12-15
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多