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

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

相关推荐
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
计算机-秋大田4 小时前
基于微信小程序的电子竞技信息交流平台设计与实现(LW+源码+讲解)
spring boot·后端·微信小程序·小程序·课程设计
加油,旭杏6 小时前
【go语言】接口
开发语言·后端·golang
谢大旭6 小时前
ASP.NET Core 中间件
后端·中间件·c#
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS景区民宿预约系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
uzong7 小时前
Java函数式接口:代码艺术的诗意绽放
后端
HelloDam8 小时前
基于 mzt-biz-log 实现接口调用日志记录
后端
SomeB1oody9 小时前
【Rust自学】15.6. RefCell与内部可变性:“摆脱”安全性限制
开发语言·后端·rust
兮动人11 小时前
Golang 执行流程分析
开发语言·后端·golang·golang 执行流程分析