SpringBoot2 整合MinIO中间件,实现文件便捷管理

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
简介: MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。


一、MinIO简介


1、基础描述


MinIO是一个开源的对象存储服务。适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。


MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。


2、存储机制


MinIO使用按对象的嵌入式擦除编码保护数据,该编码以汇编代码编写,可提供最高的性能。MinIO使用Reed-Solomon代码将对象划分为n/2个数据和n / 2个奇偶校验块-尽管可以将它们配置为任何所需的冗余级别。 这意味着在12个驱动器设置中,将一个对象分片为6个数据和6个奇偶校验块。即使丢失了多达5个((n/2)–1)个驱动器(无论是奇偶校验还是数据),仍然可以从其余驱动器可靠地重建数据。MinIO的实现可确保即使丢失或无法使用多个设备,也可以读取对象或写入新对象。最后,MinIO的擦除代码位于对象级别,并且可以一次修复一个对象。


二、MinIO环境搭建


1、安装包下载


https://dl.min.io/server/minio/release/linux-amd64/minio

建议使用某雷下载,速度会快点,下载包上传到/opt/minioconfig/run目录下。


2、创建数据存储目录


mkdir -p /data/minio/data

3、服务启动


启动并指定数据存放地址


/opt/minioconfig/run/minio server /data/minio/data/

输出日志


Endpoint:  http://localhost:9000  http://127.0.0.1:9000    
AccessKey: minioadmin
SecretKey: minioadmin

这里就是登录地址和账号密码。


三、整合SpringBoot环境


1、基础依赖


<dependency>
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
&lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;

</dependency>
<dependency>

&lt;groupId&gt;io.minio&lt;/groupId&gt;
&lt;artifactId&gt;minio&lt;/artifactId&gt;
&lt;version&gt;3.0.12&lt;/version&gt;

</dependency>


2、基础配置


配置要素:地址和端口,登录名,密码,HTML存储桶,图片存储桶。


24-1.jpg


minio:
endpoint: http://192.168.72.133:9000
accessKey: minioadmin
secretKey: minioadmin
bucketNameHtml: html
bucketNameImage: image

文件上传之后,可以基于文件地址直接访问,但是需要在MinIO中配置文件的读写权限:


24-2.jpg


3、配置参数类


@Component
@ConfigurationProperties(prefix = "minio")
public class ParamConfig {
private String endpoint ;
private String accessKey ;
private String secretKey ;
private String bucketNameHtml ;
private String bucketNameImage ;
// 省略 get 和 set方法

}


4、基于MinIO配置类


封装MinIO客户端连接工具,文件上传的基础方法,返回文件在MinIO服务上的URL地址。


import io.minio.MinioClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;

@Component
public class MinIOConfig {

private static final Logger LOGGER = LoggerFactory.getLogger(MinIOConfig.class) ;

@Resource
private ParamConfig paramConfig ;

private MinioClient minioClient ;

/**
 * 初始化 MinIO 客户端
 */
@PostConstruct
private void init(){
    try {
        minioClient = new MinioClient(paramConfig.getEndpoint(),
                                      paramConfig.getAccessKey(),
                                      paramConfig.getSecretKey());
    } catch (Exception e) {
        e.printStackTrace();
        LOGGER.info("MinIoClient init fail ...");
    }
}

/**
 * 上传 &lt;html&gt; 页面
 */
public String uploadHtml (String fileName, String filePath) throws Exception {
    minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);
    return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameHtml()+"/"+fileName ;
}

/**
 * 上传 &lt;img&gt; 图片
 */
public String uploadImg (String imgName, String imgPath) throws Exception {
    minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath);
    return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameImage()+"/"+imgName ;
}

}


5、服务实现


提供两个基础方法:HTML和图片上传,存储在不同位置。


import com.minio.file.config.MinIOConfig;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

@Service
public class UploadServiceImpl implements UploadService {

@Resource
private MinIOConfig minIOConfig ;

// 上传 &lt;html&gt; ,返回服务器地址
@Override
public String uploadHtml(String fileName, String filePath) throws Exception {
    return minIOConfig.uploadHtml(fileName,filePath);
}

// 上传 &lt;img&gt; ,返回服务器地址
@Override
public String uploadImg(String imgName, String imgPath) throws Exception {
    return minIOConfig.uploadImg(imgName,imgPath);
}

}


上传之后,基于浏览器访问接口返回的url,查看效果:


24-3.jpg


四、源代码地址


GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent

目录
相关文章
|
2月前
|
XML 前端开发 Java
基于SpringBoot 3.3实现任意文件在线预览功能的技术分享
【8月更文挑战第30天】在当今的数字化办公环境中,文件在线预览已成为提升工作效率、优化用户体验的重要功能之一。无论是文档、图片、PDF还是代码文件,用户都期望能够直接在浏览器中快速查看而无需下载。本文将围绕如何在Spring Boot 3.3框架下实现这一功能,分享一系列技术干货,助力开发者高效构建文件预览服务。
141 2
|
3月前
|
存储 前端开发 Java
SpringBoot使用云端资源url下载文件的接口写法
在Spring Boot中实现从云端资源URL下载文件的功能可通过定义REST接口完成。示例代码展示了一个`FileDownloadController`,它包含使用`@GetMapping`注解的方法`downloadFile`,此方法接收URL参数,利用`RestTemplate`下载文件,并将文件字节数组封装为`ByteArrayResource`返回给客户端。此外,通过设置HTTP响应头,确保文件以附件形式下载。这种方法适用于从AWS S3或Google Cloud Storage等云服务下载文件。
301 7
|
2天前
|
Java
SpringBoot获取文件将要上传的IP地址
SpringBoot获取文件将要上传的IP地址
16 6
|
2月前
|
JavaScript 前端开发 easyexcel
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
本文展示了基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的完整过程,包括后端使用EasyExcel生成Excel文件流,前端通过Blob对象接收并触发下载的操作步骤和代码示例。
224 0
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
|
2月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
2月前
|
存储 Java API
SpringBoot + MinIO 实现文件切片极速上传技术
【8月更文挑战第19天】在现代互联网应用中,文件上传是一个常见且重要的功能。然而,随着文件体积的增大,传统的文件上传方式往往面临效率低下、耗时过长等问题。为了提升大文件上传的速度和效率,我们可以采用文件切片上传技术,并结合SpringBoot和MinIO来实现这一功能。
149 0
|
2月前
|
Java
Java SpringBoot FTP 上传下载文件
Java SpringBoot FTP 上传下载文件
80 0
|
2月前
|
JavaScript Java
SpringBoot 下载文件
SpringBoot 下载文件
31 0
|
3月前
|
缓存 监控 中间件
中间件配置和管理问题
【7月更文挑战第14天】
44 1
|
2月前
|
存储 运维 Java
SpringBoot使用log4j2将日志记录到文件及自定义数据库
通过上述步骤,你可以在Spring Boot应用中利用Log4j2将日志输出到文件和数据库中。这不仅促进了良好的日志管理实践,也为应用的监控和故障排查提供了强大的工具。强调一点,配置文件和代码的具体实现可能需要根据应用的实际需求和运行环境进行调优和修改,始终记住测试配置以确保一切运行正常。
345 0

热门文章

最新文章

下一篇
无影云桌面