安装依赖:首先,确保已安装 multer 和 @nestjs/platform-express 依赖。
npm install --save multer @nestjs/platform-express
创建文件上传控制器:在适当的位置创建一个文件上传的控制器,并使用 @UseInterceptors 装饰器将 FileInterceptor 应用到指定的路由处理程序上。
import {
Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';
import {
FileInterceptor } from '@nestjs/platform-express';
import {
diskStorage } from 'multer';
import {
extname } from 'path';
@Controller('upload')
export class UploadController {
@Post()
@UseInterceptors(
FileInterceptor('file', {
storage: diskStorage({
destination: './uploads',
filename: (req, file, cb) => {
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
const fileExtension = extname(file.originalname);
cb(null, `${file.fieldname}-${uniqueSuffix}${
fileExtension}`);
},
}),
}),
)
uploadFile(@UploadedFile() file: Express.Multer.File) {
// 处理上传文件
console.log(file);
}
}
在上面的示例中,我们使用 FileInterceptor 拦截器来处理文件上传,同时使用 diskStorage 存储引擎自定义文件存储位置和文件名。在 filename 方法中,我们生成一个带有时间戳和随机数的唯一文件名。
定义上传路径:确保创建一个合适的文件夹(例如 uploads)来保存上传的文件。在上述代码中,我们使用 destination 属性指定存储位置为 ./uploads。
调试文件上传:运行你的 Nest.js 应用程序,并通过 POST 请求将文件上传到 /upload 路由。
现在,当你上传文件时,它将被存储在指定的文件夹中,并以自定义的文件名进行保存。