一、 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上看看文件是否已删除

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论