在 nest js 中管理上传的图片

Manage uploaded image in nest js

我使用 multer 来管理上传的文件:

@Post('upload') @UseInterceptors(FilesInterceptor("images", 10, {
  dest: "./uploads",
}))
uploadMultiple(@UploadedFiles() files) {
  console.log(files, 'test');
}

我尝试将文件扩展名添加到我上传的文件中:

@Post('upload') @UseInterceptors(FilesInterceptor("images", 10, {
  dest: "./uploads",
   filename: function (req, file, cb) {
    cb(null, Date.now() + '.jpg') //Appending .jpg
  }
}))

但是当我这样做时出现错误:

TS2345: Argument of type '{ dest: string; filename: (req: any, file: any, cb: any) => void; }' is not assignable to parameter of type 'MulterOptions'.   Object literal may only specify known properties, and 'filename' does not exist in type 'MulterOptions'

如何为我上传的文件指定文件扩展名?

您可以使用 extnamepath 导入并使用 diskStorage 动态地获取您的文件扩展名。

import { extname } from 'path';
import { diskStorage } from 'multer';

export const exampleDiskStorage = diskStorage({
  destination: './public/img/users',
  filename: (req, file, cb) => {
    return cb(null, `${Date.now()}${extname(file.originalname)}`);
  }
});

在你的模块中,你只需要导入diskStorageMulterModule.register

import { MulterModule } from '@nestjs/platform-express';

@Module({
  imports: [
    MulterModule.register({
      storage: exampleDiskStorage,
    }),
  ],
});