我正在关注
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
)
我做错了什么?
你应该指定目的地。 多种选择
@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);
}
multer
模块
模块(除非应用程序模块是您项目中唯一的模块)用于
例如,如果您的控制器属于任务域,您应该
在任务模块而不是应用程序模块中注册multer
imports: [
TypeOrmModule.forFeature([TaskRepository]),
MulterModule.register({ dest: './upload' }),
],
controllers: [TaskController],
providers: [TaskService],
})
export class TaskModule {}
upload
目录并确定它在multer
中的路径
报名@Post('upload')
@UseInterceptors(FileInterceptor('file', {dest: 'uploads/'}))
uploadFile(@UploadedFile() file: Express.Multer.File) {
console.log(file);
}
您可以在 decortor 中使用 'dest' 关键字