保姆级教你用nest集成minio

介绍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/coreminio 包。您可以使用以下命令安装它们:

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

dl.min.io/server/mini...

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也是支持的。后边我还会对我写的项目进行一些分享的。

最后如果你觉得文章对你有帮助也可以帮我点个赞。

相关推荐
该用户已不存在1 小时前
工具用得好,Python写得妙,9个效率工具你值得拥有
后端·python·编程语言
im_AMBER2 小时前
Web 开发 30
前端·笔记·后端·学习·web
码事漫谈2 小时前
LLVM IR深度技术解析:架构、优化与应用
后端
码事漫谈2 小时前
C++ 中的类型转换:深入理解 static_cast 与 C风格转换的本质区别
后端
小蒜学长2 小时前
springboot餐厅信息管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端
Chh432243 小时前
React 新版
后端
Miracle6583 小时前
【征文计划】Rokid CXR-M SDK全解析:从设备连接到语音交互的AR协同开发指南
后端
合作小小程序员小小店3 小时前
web开发,学院培养计划系统,基于Python,FlaskWeb,Mysql数据库
后端·python·mysql·django·web app
笃行3504 小时前
基于Rokid CXR-S SDK的智能AR翻译助手技术拆解与实现指南
后端
文心快码BaiduComate4 小时前
代码·创想·未来——百度文心快码创意探索Meetup来啦
前端·后端·程序员