保姆级教你用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 小时前
Go语言实战案例-创建模型并自动迁移
后端·google·go
javachen__1 小时前
SpringBoot整合P6Spy实现全链路SQL监控
spring boot·后端·sql
uzong6 小时前
技术故障复盘模版
后端
GetcharZp7 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程7 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研7 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi8 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国9 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy9 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack9 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt