Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >放弃FastDFS,Spring Boot 整合 MinIO 实现分布式文件服务,真香!

放弃FastDFS,Spring Boot 整合 MinIO 实现分布式文件服务,真香!

作者头像
码猿技术专栏
发布于 2023-05-01 03:53:11
发布于 2023-05-01 03:53:11
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

今天分享一个非常不错且开源的分布式存储组件MinIO,有多人朋友在用,文末留言评价一下~

什么是MinIO?

Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、RedisMySQL等。

1. 应用场景

MinIO 的应用场景除了可以作为私有云的对象存储服务来使用,也可以作为云对象存储的网关层,无缝对接 Amazon S3 或者 MicroSoft Azure

2. 特点

  1. 高性能:作为一款高性能存储,在标准硬件条件下,其读写速率分别可以达到 55Gb/s35Gb/s。并且MinIO 支持一个对象文件可以是任意大小,从几kb到最大5T不等。
  2. 可扩展:不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并且支持跨越多个数据中心
  3. 云原生:容器化、基于K8S的编排、多租户支持。
  4. Amazon S3兼容:使用 Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK 和 AWS CLI 访问Minio服务器。
  5. SDK支持
    1. GO SDK:https://github.com/minio/minio-go
    2. JavaSDK:https://github.com/minio/minio-java
    3. PythonSDK:https://github.com/minio/minio-py
  6. 图形化界面:有操作页面
  7. 支持纠删码:MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据。

“功能很强大,本文只是抛砖引玉,有兴趣的朋友自己去探索吧~ ”

安装MinIO

安装非常简单,笔者这里使用docker安装,步骤如下:

1. 获取镜像

执行命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull minio/minio

2. 启动镜像

执行命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /home/data:/data -v /home/config:/root/.minio minio/minio server --console-address ":9000" --address ":9001" /data

命令解释如下:

  • -p9000是图形界面的端口,9001是API的端口,在使用SDK连接需要用到
  • MINIO_ACCESS_KEY:指定图形界面的用户名
  • MINIO_SECRET_KEY:指定图形界面的密码

按照上述两个步骤启动成功即可。

3. 图形界面操作

安装成功后直接访问地址:http:/ip:9000/login,如下:

输入用户名和密码登录成功后,如下:

菜单很多,这里就不再详细介绍了,笔者这里直接在Buckets菜单中创建一个桶为test,如下图:

并且设置这个桶的隐私规则为public,如下:

“MinIO到此已经安装设置成功了 ”

Spring Boot 整合MinIO 上传文件

虽然MinIO在图形界面提供了手动上传的操作,但是也可以通过SDK的方式去上传,下面介绍一下Spring Boot 整合MinIO上传文件。

1. 获取accessKey和secretKey

这里的accessKeysecretKey并不是图形界面登录名和密码,获取很简单,直接在图形界面中操作,如下图:

2. 添加依赖

添加MinIO的依赖,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.2.1</version>
</dependency>

3. 添加配置

这里笔者对SDK做了简单的封装,案例源码都会提供,下面只列出部分代码。

aplication.yml配置中添加MInIO相关的配置,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
minio:
  # 访问的url
  endpoint: http://192.168.47.148
  # API的端口
  port: 9001
  # 秘钥
  accessKey: HQGWFYLWGC6FVJ0CQFOG
  secretKey: pUGhAgQhZDxJaLmN3uz65YX7Bb3FyLdLglBvcCr1
  secure: false
  bucket-name: test # 桶名 我这是给出了一个默认桶名
  image-size: 10485760 # 我在这里设定了 图片文件的最大大小
  file-size: 1073741824 # 此处是设定了文件的最大大小

4. 新建上传文件接口

笔者这里定义了一个上传文件接口,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author 公众号:码猿技术专栏
 */
@RequestMapping("/minio")
@RestController
public class MinioController {

    @Autowired
    private  MinioService minioService;

    @PostMapping("/upload")
    public String uploadFile(MultipartFile file, String bucketName) {
        String fileType = FileTypeUtils.getFileType(file);
        if (fileType != null) {
            return minioService.putObject(file, bucketName, fileType);
        }
        return "不支持的文件格式。请确认格式,重新上传!!!";
    }
}

“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9535 获取! ”

5. 测试

上述4个步骤已经整合完成了,下面直接调用接口上传一张图片试一下,如下:

接口返回的URL就是文件的访问地址,直接输入浏览器访问即可。

在MInIO中也可以看到存储的文件,如下图:

如果你需要分享给别人,也可以手动分享,有效期是7天,一旦过了这个有效期将会失效,如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码猿技术专栏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在asp.net mvc中使用PartialView返回部分HTML段
在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同一时候它还有个兄弟PartialViewResult
全栈程序员站长
2022/07/13
1.7K0
手把手教你写dotnet core(MVC)
上一篇手把手教你写dotnet core(入门篇)我们已经简单在dotnet core里面跑了个”hello world!”和累加程序.
李国宝
2020/01/02
1.1K0
手把手教你写dotnet core(MVC)
ASP.NET MVC的View是如何被呈现出来的?[设计篇]
在前面的四篇文章中,我们介绍了各种ActionResult以及相关的请求响应机制,但是与“View的呈现”相关的ActionResult是ViewResult。通过ViewResult的执行实现的对V
蒋金楠
2018/01/15
1.1K0
ASP.NET MVC的View是如何被呈现出来的?[设计篇]
ASP.NET-框架分类与详解
ASP.NET是由微软公司推出的一种基于.NET框架的服务器端Web应用程序开发技术。它提供了丰富的工具和框架,用于开发各种规模的Web应用程序和服务。ASP.NET具有高度的灵活性和可扩展性,适用于不同规模和复杂度的项目。
Damon小智
2024/03/17
2640
ASP.NET-框架分类与详解
ASP.NET Core 2.0 : 四. _Layout与_ViewStart
本章我们新建一个项目,并通过这个项目熟悉一下_Layout与_ViewStart以及它们的加载顺序. 新建一个项目 首先, 文件->新建一个解决方案 选择.Net Core 的APP下面的ASP.NE
FlyLolo
2018/05/17
1.1K0
ASP.NET MVC 重点教程一周年版 第十一回 母版页、用户自定义控件及文件上传
1.母版页是与Controller无关的,母版页只是一个View文件,而没有任何Controller与之相对应。
重典
2022/04/11
1.2K0
ASP.NET MVC 重点教程一周年版 第十一回 母版页、用户自定义控件及文件上传
《asp.net core 3 高级编程(第8版)》学习笔记 01
第二章通过一个最简单的例子,了解创建和 asp.net core 程序的过程,以及熟悉一下路由。作为入门来说,建议还是在 Visual studio 环境下创建项目以及运行项目,减少学习过程钟的挫败感。
StoneWM
2022/08/13
5420
ASP.NET MVC的Razor引擎:RazorViewEngine
基于Web Form引擎的WebFormViewEngine和针对Razor引擎的RazorViewEngine都是抽象类型BuildManagerViewEngine的子类,而后者又继承自VirtualPathProviderViewEngine。在这里我们仅仅对实现在RazorViewEngine中View获取的逻辑进行简单介绍。由于Razor引擎下的View通过RazorView对象来表示,而RazorView通过View文件的虚拟路径来构建,所以RazorViewEngine的View获取机制在于根
蒋金楠
2018/01/15
1.2K0
ASP.NET MVC的Razor引擎:RazorViewEngine
无尽的忙碌换来幸福的日子「建议收藏」
人总是忙碌的,从小要读书,长大了工作,结婚了,有孩子了,一辈子也可能等到孩子成家了才能稍微休息一下下吧,不过有时候想想,忙碌点好,一辈子也就那么长,等闭了后还能休息好久好久呢,何不忙碌点呢。
全栈程序员站长
2022/07/28
5120
无尽的忙碌换来幸福的日子「建议收藏」
ASP.NET MVC 重点教程一周年版 第一回 安装,并使ASP.NET MVC页面运行起来
从前写过一系列的ASP.NET MVC教程,ASP.NET MVC在这之后历经5个preview版本终于到今天的RC版本,而且不久就要正式推出正式版本,所以值此之际,重典也重新修正这一系列的教程,使之与时俱进。
重典
2022/04/11
6980
ASP.NET MVC 重点教程一周年版 第一回 安装,并使ASP.NET MVC页面运行起来
ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/11/12
3K0
ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
ASP.NET Core错误处理中间件[2]: 开发者异常页面
《呈现错误信息》通过几个简单的实例演示了如何呈现一个错误页面,该过程由3个对应的中间件来完成。下面先介绍用来呈现开发者异常页面的DeveloperExceptionPageMiddleware中间件,该中间件在捕捉到后续处理过程中抛出的异常之后会返回一个媒体类型为text/html的响应,后者在浏览器上会呈现一个错误页面。由于这是一个为开发者提供诊断信息的异常页面,所以可以将其称为开发者异常页面(Developer Exception Page)。该页面不仅会呈现异常的详细信息(类型、消息和跟踪堆栈等),还会出现与当前请求相关的上下文信息。如下所示的代码片段是DeveloperExceptionPageMiddleware中间件的定义。更多关于ASP.NET Core的文章请点这里]
蒋金楠
2021/01/20
1.1K0
.NET MVC简单介绍
HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大、工作量大。因此提供了ASP.Net MVC、ASP.Net WebForm等高级封装的框架,简化开发,他们的底层仍然是HttpHandler、HttpRequest等这些东西。比如ASP.Net MVC的核心类仍然是实现了IHttpHandler接口的MVCHandler。
全栈程序员站长
2022/09/06
1.2K0
.NET MVC简单介绍
ASP.NET MVC5高级编程——(2)MVC模式的视图
1 ,视图职责是向用户提供界面,当控制器针对被请求的URL执行完合适的逻辑后,就将要显示的内容委托给视图。
浩Coding
2019/07/02
3.1K0
ASP.NET MVC5高级编程——(2)MVC模式的视图
.NET MVC第二章、控制器使用
输入控制器名称,一定要以【Controller】结尾,实际控制器名称是前缀的命名,这里是【Test】
红目香薰
2022/11/30
9280
.NET MVC第二章、控制器使用
[ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面
随着最终用户对用户体验需求的不断提高,实际上我们很多情况下已经在按照桌面应用的标准来设计Web应用,甚至很多Web页面本身就体现为一个单一的页面。对于这种复杂的页面,我们在设计的时候不可以真的将所有涉及的元素通通至于某个单独的View中,将复杂页面相对独立的内容“分而治之”才是设计之道。我们可以借鉴Smart Clent应用的设计方式:将一个Windows Form作为应用的容器(Smart Client Shell),在操作过程中动态地激活相应的用户控件(Smart Part)并加载到容器中。对于一个复杂页面来说,我们也只需要将其设计成一个容器,至于运行过程中动态显示的内容则可以通过Ajax调用获取相应的HTML来填充。[源代码从这里下载]
蒋金楠
2022/05/09
3.6K0
[ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面
ASP.NET MVC 5 - 视图
在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML。 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所引入的Razor视图引擎(Razor view engine)。Razor视图模板文件使用.cshtml文件扩展名,并提供了一个优雅的方式来使用C#语言创建所要输出的HTML。用Razor编写一个视图模板文件时,将所需的字符和键盘敲击数量降到了最低,并实现了快速,流畅的编码工作流程。 当前在控制器类中的Inde
葡萄城控件
2018/01/10
3.4K0
ASP.NET MVC 5 - 视图
MVC3.0+knockout.js+Ajax 实现简单的增删改查
    自从到北京入职以来就再也没有接触MVC,很多都已经淡忘了,最近一直在看knockout.js 和webAPI,本来打算采用MVC+knockout.js+webAPI来实现这个小DEMO的,无奈公司用的开发环境是VS2010只安装了MVC3.0。那就先练习一下MVC和knockout吧。博客园里有很多这样的文章,但是觉得还是要自己亲自动手写一下。
写代码的猿
2019/04/11
2.4K0
MVC3.0+knockout.js+Ajax 实现简单的增删改查
ASP.NET MVC (一、控制器与视图)
ASP.NET MVC是最简洁、最方便、最高效、最快速的小型网站开发的方法,本文可以让一个小白用最快速的方式学会网站开发。
红目香薰
2022/11/29
1.9K0
ASP.NET MVC (一、控制器与视图)
.NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计。那如何套用呢?今天就以我们系列实战教程中的CMS系统为例来应用第三方的后台模板LayuiCMS2.0为例来进行实战演练吧!
依乐祝
2019/01/03
9290
推荐阅读
相关推荐
在asp.net mvc中使用PartialView返回部分HTML段
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验