一、 minio
minio 是一个基于apache license v2.0开源协议的对象存储服务。它兼容亚马逊s3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5t不等。
minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 nodejs, redis 或者 mysql。
二、 minio安装和启动
由于minio是一个单独的服务器,需要单独部署
三、 pom.xml
<dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version>1.18.16</version> </dependency> <!-- springboot web容器 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>io.minio</groupid> <artifactid>minio</artifactid> <version>8.3.4</version> </dependency>
四、 applicatin.properties(配置文件)
# 设置单个文件大小 spring.servlet.multipart.max-file-size= 50mb #minio文件服务器配置 s3.url=http://localhost:9000 s3.accesskey=admin s3.secretkey=admin123 s3.bucketname=test
五、 编写java业务类
minio涉及到的方法有:
判断存储桶是否存在,创建存储桶,上传文件,读取文件、下载文件,删除文件等操作
1、storageproperty 存储属性类
import lombok.data; import org.springframework.boot.context.properties.configurationproperties; import org.springframework.stereotype.component; /** * @author yang * @date 2023/1/3 14:00 * @version 1.0 */ @data @component @configurationproperties(prefix = "s3") public class storageproperty { private string url; private string accesskey; private string secretkey; // private long calltimeout = 60000; // private long readtimeout = 300000; }
2、minio 配置类
import io.minio.bucketexistsargs; import io.minio.minioclient; import io.minio.messages.bucket; import lombok.sneakythrows; import lombok.extern.slf4j.slf4j; import org.springframework.beans.factory.annotation.autowired; import org.springframework.context.annotation.configuration; import org.springframework.stereotype.component; import javax.annotation.postconstruct; import java.util.list; /** * @author yang * @date 2023/1/3 14:03 * @version 1.0 */ @slf4j @component @configuration public class minioclientconfig { @autowired private storageproperty storageproperty; private static minioclient minioclient; /** * @description: 获取minioclient * @date 2021/6/22 16:55 * @return io.minio.minioclient */ public static minioclient getminioclient(){ return minioclient; } /** * 判断 bucket是否存在 * * @param bucketname: * 桶名 * @return: boolean * @date : 2020/8/16 20:53 */ @sneakythrows(exception.class) public static boolean bucketexists(string bucketname) { return minioclient.bucketexists(bucketexistsargs.builder().bucket(bucketname).build()); } /** * 获取全部bucket * * @param : * @return: java.util.list<io.minio.messages.bucket> * @date : 2020/8/16 23:28 */ @sneakythrows(exception.class) public static list<bucket> getallbuckets() { return minioclient.listbuckets(); } /** * 初始化minio配置 * * @param : * @return: void * @date : 2020/8/16 20:56 */ @postconstruct public void init() { try { minioclient = minioclient.builder() .endpoint(storageproperty.geturl()) .credentials(storageproperty.getaccesskey(), storageproperty.getsecretkey()) .build(); } catch (exception e) { e.printstacktrace(); log.error("初始化minio配置异常: 【{}】", e.fillinstacktrace()); } } }
六、 miniocontroller
文件上传、文件读取、文件下载、文件删除接口如下:
/** * @author yangb * @date 2022/11/27 15:55 * @version 1.0 */ @restcontroller @requestmapping("/minio") public class miniocontroller extends basecontroller { minioutil minioutil = new minioutil(); /** * 上传文件 * @param file * @return */ @postmapping("/uploadfile") public ajaxresult uploadfile(@requestbody multipartfile file) { minioclient minioclient = minioclientconfig.getminioclient(); if (minioclient == null) { return ajaxresult.error("连接minio服务器失败", null); } resultentity<map<string, object>> result = minioutil.minioupload(file, "", "data-enpower"); if (result.getcode() == 0) { return ajaxresult.success("上传成功"); } else { return ajaxresult.error("上传错误!!!"); } } /** * 获取文件预览地址 * @param filename * @return */ @requestmapping("/getredfile") public ajaxresult getredfile(@requestbody string filename) { minioclient minioclient = minioclientconfig.getminioclient(); if (minioclient == null) { return ajaxresult.error("连接minio服务器失败", null); } string url = minioutil.getpreviewfileurl("data-enpower",filename); return ajaxresult.success(url); } /** * 下载文件 * @param filename * @param response * @return */ @requestmapping("/downloadfile") public string downloadfile(@requestparam string filename, httpservletresponse response) { minioclient minioclient = minioclientconfig.getminioclient(); if (minioclient == null) { return "连接minio服务器失败"; } return minioutil.downloadfile("data-enpower",filename,response) != null ? "下载成功" : "下载失败"; } /** * 删除文件 * * @param filename 文件路径 * @return */ @postmapping("/deletefile") public string deletefile(string filename) { minioclient minioclient = minioclientconfig.getminioclient(); if (minioclient == null) { return "连接minio服务器失败"; } boolean flag = minioutil.deletefile("data-enpower",filename); return flag == true ? "删除成功" : "删除失败"; } }
七、调试结果
1、 文件上传
minio上的文件
2、 文件下载
3、 文件删除
我们在minio上看看文件是否已删除
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论