nestjs上传多张图片
时间: 2023-08-28 16:06:40 浏览: 190
你可以使用 `multer` 库来上传多张图片。以下是在 NestJS 中使用 `multer` 实现多张图片上传的示例代码:
1. 安装 `multer` 库:
```
npm install --save multer
```
2. 在控制器中导入 `multer` 库:
```
import { Controller, Post, UploadedFiles, UseInterceptors } from '@nestjs/common';
import { FilesInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
import { editFileName } from './utils/file-upload.utils';
```
3. 创建一个上传文件的中间件:
```
export const multerOptions = {
storage: diskStorage({
destination: './uploads',
filename: editFileName,
}),
};
```
4. 创建一个上传文件的工具类:
```
export const editFileName = (req, file, callback) => {
const name = file.originalname.split('.')[0];
const fileExtName = extname(file.originalname);
const randomName = Array(4)
.fill(null)
.map(() => Math.round(Math.random() * 16).toString(16))
.join('');
callback(null, `${name}-${randomName}${fileExtName}`);
};
```
5. 在控制器中使用 `@UseInterceptors()` 装饰器来启用 `FilesInterceptor` 中间件:
```
@Controller('upload')
export class UploadController {
@Post()
@UseInterceptors(FilesInterceptor('files', 20, multerOptions))
async uploadMultipleFiles(@UploadedFiles() files) {
console.log(files);
const response = [];
files.forEach((file) => {
const fileReponse = {
originalname: file.originalname,
filename: file.filename,
};
response.push(fileReponse);
});
return response;
}
}
```
6. 在路由中注册控制器:
```
import { Module } from '@nestjs/common';
import { UploadController } from './upload.controller';
@Module({
controllers: [UploadController],
})
export class UploadModule {}
```
这样,你就可以通过 POST 请求上传多张文件。在这个示例中,上传的文件将被保存在 `./uploads` 目录下。
阅读全文