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

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

相关推荐
wowocpp21 分钟前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go26 分钟前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
freellf31 分钟前
go语言学习进阶
后端·学习·golang
全栈派森3 小时前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse3 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭4 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架4 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱4 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
☞无能盖世♛逞何英雄☜4 小时前
Flask框架搭建
后端·python·flask
进击的雷神4 小时前
Perl语言深度考查:从文本处理到正则表达式的全面掌握
开发语言·后端·scala