SpringBoot集成minio文件存储
- 一、Windows安装minio服务
- 1.官网下载minio服务端
- 下载地址
- 2.切换到Minio.exe的所在路径
- 1.创建data、logs两个目录
- 2.打开cmd运行
- 2.启动服务
- 3.浏览器打开
- 二.Linux中minio安装
- 1.下载包
- 2.新建安装目录
- 3.将下载的文件移动到minio目录下,执行
- 4.启动&后台启动
- 5.自定义端口启动(默认端口:9000)
- 6.查看状态
- 7.浏览器访问
- 三.SprongBoot中配置
- 1.pom.xml文件中添加依赖(如果有版本冲突更换相关版本即可)
- 2. application.yml配置
- 3.代码编写
- 1.实体类
- 2.配置类
- 3.工具类
- 4.控制类
- 5.ApiPost测试
- 6.浏览器访问
一、Windows安装minio服务
1.官网下载minio服务端
下载地址
2.切换到Minio.exe的所在路径
1.创建data、logs两个目录
2.打开cmd运行
#设置设置用户名
setx MINIO_ROOT_USER myname
#设置登录密码
setx MINIO_ROOT_PASSWORD mypassword
2.启动服务
minio.exe server \data --console-address ":9090" --address ":9000" > \logs\minio.log
1.data为创建的data目录
2.logs为创建的logs目录
(改为自己的实际目录即可)
3.9090是控制台端口,9000才是服务的端口。
3.浏览器打开
http://127.0.0.1:9090 填入刚刚设置的账号密码。
如果忘了可以在logs\minio.log文件中查看
进入主页面:
二.Linux中minio安装
1.下载包
下载地址
https://dl.min.io/server/minio/release/linux-amd64/minio
2.新建安装目录
mkdir -p /opt/minio/{data,logs}
3.将下载的文件移动到minio目录下,执行
mv minio minio /opt/minio //移动到指定目录
chmod +x minio //给予权限
export MINIO_ACCESS_KEY=myname//创建账号
export MINIO_SECRET_KEY=mypassword//创建密码
./minio server /opt/minio/data //启动
4.启动&后台启动
//前台启动
./minio server /opt/minio/data
//后台启动
nohup ./minio server /opt/minio/data > /opt/minio/logs/minio.log &
注意:需要在Linux中关闭防火墙或者开放所需要的端口,否则会无法访问的
5.自定义端口启动(默认端口:9000)
自定义端口方式:自定义启动端口号以及控制台端口号,不设置则控制台会自动配置其他端口号,非常不方便。
–address和–console-address是MinIO服务器启动命令中的两个参数,它们具有以下区别:–address参数:用于指定MinIO服务器监听的S3 API访问地址。S3 API是用于与MinIO进行对象存储操作的接口,例如上传、下载、删除对象等。通过–address参数,您可以指定MinIO服务器监听的IP地址和端口。例如,–address '0.0.0.0:9000’表示MinIO服务器将监听所有网络接口上的9000端口。
–console-address参数:用于指定MinIO服务器控制台的访问地址。控制台是MinIO的管理界面,提供了用户友好的界面来管理存储桶、对象和访问权限等。通过–console-address参数,您可以指定MinIO服务器控制台的IP地址和端口。例如,–console-address '0.0.0.0:9999’表示MinIO服务器的控制台将监听所有网络接口上的9999端口。
总结起来,–address参数用于S3 API访问,而–console-address参数用于MinIO服务器控制台访问。它们允许您分别指定不同的IP地址和端口来处理这两种类型的访问请求。
nohup ./minio server --address :9000 --console-address :9001 /opt/minio/data > /opt/minio/logs/minio.log &
6.查看状态
ps -ef|grep minio
7.浏览器访问
三.SprongBoot中配置
1.pom.xml文件中添加依赖(如果有版本冲突更换相关版本即可)
<!-- minio 相关依赖 -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!-- SpringBoot配置依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>3.1.2</version>
</dependency>
2. application.yml配置
minio:
endpoint: http://127.0.0.1:9000 #服务运行端口
accesskey: myname #刚刚设置的账号
secretKey: mypassword #刚刚设置的密码
3.代码编写
1.实体类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
private String endpoint;
private String accesskey;
private String secretKey;
}
2.配置类
import com.example.minio.pojo.MinioProp;
import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MinioProp.class)
public class MinioConfig {
@Autowired
private MinioProp minioProp;
@Bean
public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
}
}
3.工具类
import com.alibaba.fastjson.JSONObject;
import com.example.minio.pojo.MinioProp;;
import io.minio.MinioClient;
import io.minio.errors.*;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@Slf4j
@Component
public class MinioUtils {
@Autowired
private MinioClient client;
@Autowired
private MinioProp minioProp;
/**
* 创建bucket
*
* @param bucketName bucket名称
*/
@SneakyThrows
public void createBucket(String bucketName) {
if (!client.bucketExists(bucketName)) {
client.makeBucket(bucketName);
}
}
/**
* 上传文件
*
* @param file 文件
* @param bucketName 存储桶
* @return
*/
public JSONObject uploadFile(MultipartFile file, String bucketName) throws Exception {
JSONObject res = new JSONObject();
res.put("code", 0);
// 判断上传文件是否为空
if (null == file || 0 == file.getSize()) {
res.put("msg", "上传文件不能为空");
return res;
}
try {
// 判断存储桶是否存在
createBucket(bucketName);
// 文件名
String originalFilename = file.getOriginalFilename();
// 新的文件名 = 存储桶名称_时间戳.后缀名
String fileName = bucketName + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("."));
// 开始上传
client.putObject(bucketName, fileName, file.getInputStream(), file.getContentType());
res.put("code", 1);
res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);
return res;
} catch (Exception e) {
log.error("上传文件失败:{}", e.getMessage());
}
res.put("msg", "上传失败");
return res;
}
}
4.控制类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.minio.utils.MinioUtils;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
@CrossOrigin("*")
public class MinioController {
@Autowired
private MinioUtils minioUtils;
@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam(name = "file", required = false) MultipartFile file, HttpServletRequest request) {
JSONObject res = null;
try {
res = minioUtils.uploadFile(file, "product");
} catch (Exception e) {
e.printStackTrace();
res.put("code", 0);
res.put("msg", "上传失败");
}
return res.toJSONString();
}
}
5.ApiPost测试
6.浏览器访问