如何使用 Nest.js 上传文件并以自定义文件名保存文件
最编程
2024-03-02 22:55:00
...
安装依赖:首先,确保已安装 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')exportclassUploadController{
@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 路由。
现在,当你上传文件时,它将被存储在指定的文件夹中,并以自定义的文件名进行保存。