node.js - 文件字段未包含在 NestJS 的 @Body 装饰器中
问题描述
我正在尝试构建一个简单的路线,用户将在其中发布少量文本数据以及文件。假设一个任务的属性是标题、描述和文件。我为此创建了一个 DTO,如下所示:-
export class CreateTaskDto {
title: string;
description: string;
file: any
}
这是storage.config.ts
export const storage = diskStorage({
destination: "./uploads",
filename: (req, file, callback) => {
callback(null, generateFilename(file));
}
});
function generateFilename(file) {
const filename = file.originalname
const ext = filename.split(".").pop()
return `${Date.now()}_${filename}`;
}
这tasks.controller.ts
@Post()
@UseInterceptors( FileInterceptor( "file", { storage }))
async createNewTask(@UploadedFile() file, @Body() dto: CreateTaskDto) {
/*
here is the dto I received:
{
"title": "Task Title",
"description": "Task Description"
}
You can see that the file field is not being added to the dto
*/
}
file
字段数据不包含在装饰@Body
器变量dto
中。我知道我可以通过file
变量访问文件数据,但是有没有办法指示嵌套将文件值包含到 @Body 装饰器中?
谢谢
解决方案
这就是multer
工作原理,它获取上传的文件并将它们附加到req.file
或req.files
取决于是否发送了一个或多个。如果需要,您可以创建一个自定义装饰器将req.body
and合并req.file
在一起,但通常这不是 Nest 所做的,而是底层包本身。
推荐阅读
- vba - 如何传播脚本以应用于所有打开的 CATIA 工程图
- azure - composer.yml 文件中的内联 nginx conf:可能吗?
- javascript - 如何修复或理解为什么我的静态文件不通过 express.static 处理
- android - 如何在android中生成firebase注册令牌
- r - 尝试网络抓取文本时字符(0)的结果
- php - %SQLSTATE[HY000] [2002] 连接被拒绝
- html - 如何更改焦点上输入占位符的文本仅使用 css?
- gnuplot - 如何修改对数刻度图中的偏移量
- mysql - SQL - 根据条件将字符插入字符串
- javascript - 为什么 element-ui 的 validate() 函数不断清除服务器端通过验证(通过错误道具)错误?