为什么使用NEST.JS和Multer无法执行我的上载文件POST?

我尝试使用nesT.JS和MULTER制作一个简单的文件上传REST接口-但它不起作用。我可以将二进制文件 debug.log 发布到URL,并且看到“ Hello undefined”消息,但是在给定的文件夹 uploads 中都没有创建上传的文件>也不会因为扩展名不正确而被拒绝-根据文件过滤器。 但是,没有显示异常或错误。

为什么multer不起作用? 为什么 @Uploadedfile()文件显示为未定义?

谢谢

import { Controller,Post,Request,UseInterceptors,FileInterceptor,UploadedFile,HttpCode,HttpException,HttpStatus } from '@nestjs/common';
import { diskStorage,File } from 'multer';

const path = require('path');

const myStorage = diskStorage({
    destination: function (req,file,callback) {
        callback(null,'./uploads/');
    },limits: { fileSize: 1000000 },fileFilter: function (req,cb) {
        const extension = path.extname(file.originalname).toLowerCase()
        const mimetyp = file.mimetype
        if (extension !== '.jpg' || mimetyp !== 'image/jpg') {
            cb(new HttpException('Only images are allowed',HttpStatus.NOT_accEPTABLE));
        }
        cb(null,true);
    },filename: function (req,file.fieldname + '_' + Date.now() + '.jpg');
    }
});

@Controller('documents')
export class DocumentsController {
    @Post()
    @HttpCode(HttpStatus.OK)
    @UseInterceptors(FileInterceptor('file',{ storage: myStorage }))
    public async addDocument(@UploadedFile() file): Promise<any> {
        console.log("Hello " + file);
    }
}
yuyunc1 回答:为什么使用NEST.JS和Multer无法执行我的上载文件POST?

我知道问这个问题的人回复晚了,但答案是给未来将要面对的人。

首先检查nestjs documentation

如果 MulterModule*.module.ts 文件中注册,它会在 src 文件夹之外创建上传目录。这是一个很好的做法。

MulterModule.register({
    dest: './upload',});

如果需要更改目标目录,请使用 destination: String|callback 中的 DiskStorageOptionsdest:string 中的 FileInterceptor。对于上传路径,请使用 src/../upload 之类的方式将文件夹保留在 src 目录之外。

问题中提到的上述代码的其他问题:

  • 我看到“Hello undefined”消息

原因 console.log("Hello " + file); 此处的文件是 Object 并尝试与 String 连接。

将其更改为 console.log("Hello ",file);

  • 扩展名不正确,未显示异常或错误

     fileFilter: function (req,file,cb) {
         const extension = path.extname(file.originalname).toLowerCase()
         const mimetyp = file.mimetype
         if (extension !== '.jpg' || mimetyp !== 'image/jpg') {
             cb(new HttpException('Only images are allowed',HttpStatus.NOT_ACCEPTABLE));
         }
         cb(null,true);
     }
    

这里需要添加一个return

本文链接:https://www.f2er.com/3085943.html

大家都在问