Nest js 上传不保存文件

问题描述 投票:0回答:3

我正在关注

nestjs
File upload 文档,我的端点正在获取文件,但文件未存储。

我使用的配置与 NesJS 相同

@Post('upload')
@UseInterceptors(FileInterceptor('file'))
uploadFile(@UploadedFile() file) {
  console.log(file);
}

我的

app.module
文件,我添加了导入:

MulterModule.register({
      dest: './uploads'
    })

但是文件没有存放在目录

uploads
中。完整日志为:

undefined
{
  fieldname: 'file',
  originalname: 'nopornimage.png',
  encoding: '7bit',
  mimetype: 'image/png',
  buffer: <Buffer 89 50 4e 47 0d 0a 1a 04 d00 01 73 52 47 42 00 ae ce 04 ... 20087 more bytes>,
  size: 20137
}

(是的,包括

undefined

我做错了什么?

nestjs multer
3个回答
5
投票

你应该指定目的地。 多种选择

@Post('upload')
@UseInterceptors(FileInterceptor('file', {
  dest: 'uploads/'
}))
uploadFile(@UploadedFile() file) {
  console.log(file);
}

或者你可以使用fs模块中的

createWriteStream
自己保存文件。

import {createWriteStream} from 'fs'

@Post('upload')
@UseInterceptors(FileInterceptor('file'))
uploadFile(@UploadedFile() file) {
  const ws = createWriteStream('custom_filename')
  ws.write(file.buffer)
  console.log(file);
}


1
投票
  1. 你应该在你的域模块而不是应用程序中注册
    multer
    模块 模块(除非应用程序模块是您项目中唯一的模块)用于 例如,如果您的控制器属于任务域,您应该 在任务模块而不是应用程序模块中注册
    multer
   imports: [
     TypeOrmModule.forFeature([TaskRepository]),
     MulterModule.register({ dest: './upload' }),
   ],
   controllers: [TaskController],
   providers: [TaskService],
 })
 export class TaskModule {}
  1. 创建
    upload
    目录并确定它在
    multer
    中的路径 报名

0
投票
@Post('upload')
@UseInterceptors(FileInterceptor('file', {dest: 'uploads/'}))
uploadFile(@UploadedFile() file: Express.Multer.File) {
    console.log(file);
}

您可以在 decortor 中使用 'dest' 关键字

© www.soinside.com 2019 - 2024. All rights reserved.