介绍minio
首先先让我介绍一下MinIO :它是一个开源的对象存储服务器,它可以帮助你构建自己的私有云存储解决方案。它的设计目标是兼容 Amazon S3(Simple Storage Service),这意味着你可以使用与 S3 相同的 API 来管理和访问存储在 MinIO 中的对象。它的主要用途是作为对象存储解决方案,用于存储和管理大量的非结构化数据,如图片、视频、日志、备份文件等。
开始集成
初始工作
1.安装 Nest CLI(如果您尚未安装):
bash
npm install -g @nestjs/cli
2.创建一个nest项目
bash
nest new nest-minio-integration
3.确保您已经安装了 @nestjs/core
和 minio
包。您可以使用以下命令安装它们:
bash
npm install @nestjs/core minio
4.安装 @nestjs/multer
包
bash
npm install @nestjs/platform-express multer
5.使用快捷命令生成一个minio文件夹
bash
nest g res minio
使用restful风格
6.在本地电脑下载minio
7.进入下载目录调用cmd
这里我是把它放在D盘下了
7.访问minio
http://127.0.0.1:9000/,进入minio服务器登录页面,默认账号密码均为:minioadmin
到这里我们的初始配置就准备好了
创建minio服务
1.src/minio/minio.service.ts
ts
// src/minio/minio.service.ts
import { Injectable } from '@nestjs/common';
import * as Minio from 'minio';
@Injectable()
export class MinioService {
private readonly minioClient: Minio.Client;
constructor() {
this.minioClient = new Minio.Client({
endPoint: '192.168.2.105',
port: 9000,
useSSL: false,
accessKey: 'minioadmin',
secretKey: 'minioadmin',
});
}
async uploadFile(bucketName: string, objectName: string, data: Buffer){
await this.minioClient.putObject(bucketName, objectName, data`);`
}
}
2.src/minio/minio.controller.ts
ts
// src/minio/minio.controller.ts
import { Controller, Get, Inject, Param, Res } from '@nestjs/common';
import { MinioService } from '../minio/minio.service';
import { Response } from 'express';
@Controller('minio')
export class MinioController {
constructor(private readonly minioService: MinioService) {}
@Post('upload')
@UseInterceptors(FileInterceptor('file'))
async uploadFile(@UploadedFile() file: any){
await this.minioService.uploadFile('images', file.originalname, file.buffer);
return 'File uploaded successfully';
}
}
3.设置AppModule
ts
// src/app.module.ts
import { Module } from '@nestjs/common';
import { MinioModule } from './minio/minio.module';
import { AppController } from './app.controller';
@Module({
imports: [MinioModule],
controllers: [AppController],
})
export class AppModule {}
4.使用apifox测试接口
然后就可以在minio上看到图片了
体验minio
很多人把图片存到minio后却发现无法通过路径去访问,这是因为minio有个访问权限的问题
然后就可以把路径放到浏览器里获取图片啦 http://192.168.2.105:9000/images/QQ%E6%B5%8F%E8%A7%88%E5%99%A8%E6%88%AA%E5%9B%BE20211030102619.png 注意域名/桶名/文件名!
尾语
至此nest集成minio结束,非常感谢你的阅读。 我这个暑假都在用nest做一个博客项目,因为需要把用户头像和文章图片封面啥的进行文件存储,偶然想起之前用springboot集成minio,想着试试nest能不能集成minio,这样一看nest也是支持的。后边我还会对我写的项目进行一些分享的。
最后如果你觉得文章对你有帮助也可以帮我点个赞。