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

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

相关推荐
k***82519 分钟前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
tan180°9 分钟前
Linux网络TCP(上)(11)
linux·网络·c++·后端·tcp/ip
l***466817 分钟前
springboot使用redis
spring boot·redis·后端
嘟嘟w41 分钟前
Spring 核心注解深度分析
java·后端·spring
武子康1 小时前
大数据-160 Apache Kylin Cube 实战:从建模到构建与查询(含踩坑与优化)
大数据·后端·apache kylin
q***96582 小时前
深入解析Spring Boot中的@ConfigurationProperties注解
java·spring boot·后端
Jamesvalley2 小时前
flask处理所有logging
后端·python·flask
databook2 小时前
别急着转投 Polars!Pandas 3.0 带着“黑科技”杀回来了
后端·python·数据分析
烟袅3 小时前
为什么调用 OpenAI Tools 后,还要再请求一次大模型?——从代码看 LLM 工具调用的本质
后端·python·llm
e***0963 小时前
SpringBoot下获取resources目录下文件的常用方法
java·spring boot·后端