SpringBoot使用minio进行文件管理的流程步骤
作者:头dd先生
springboot+docker desktop使用minio进行文件管理,记录一下。
这里我用docker desktop去安装minio,如果本地已经装好minio的话可以跳过前面的步骤。
安装docker的步骤我就省略了。
一、拉取minio镜像
打开命令行执行拉去命令:
docker pull quay.io/minio/minio

执行完后我们可以通过命令去查看镜像:
docker images

或者docker desktop查看:

二、创建配置文件和上传文件的目录
在D盘创建两个目录:
D:\DockerData\minio\config
D:\DockerData\minio\data

三、启动容器
docker run -p 9000:9000 -p 9090:9090 --name minio-server -d --restart=always -e "MINIO_ACCESS_KEY=admin2025" -e "MINIO_SECRET_KEY=admin2025" -v D:\DockerData\minio\data:/data -v D:\DockerData\minio\config:/root/.minio quay.io/minio/minio server /data --console-address ":9090" -address ":9000"

这样就启动好了,咱们也可以通过 命令去查看启动的容器:
docker ps

或者通过可视化docker去查看:

上面那段命令的解释:
docker run: 这是启动新容器的命令。-p 9000:9000: 这个选项将宿主机的端口9000映射到容器的端口9000。MinIO的服务端API将通过这个端口提供访问。-p 9090:9090: 同样,这个选项将宿主机的端口9090映射到容器的端口9090。MinIO的Web管理界面将通过这个端口提供访问。--name minio-server: 这个选项为容器指定了一个名称,这里命名为minio-server。-d: 这个选项告诉Docker在后台运行容器,即以守护态运行。--restart=always: 这个选项指定了容器的重启策略。always意味着容器总是会在退出时重启,这适用于希望容器持续运行的服务。-e "MINIO_ACCESS_KEY=admin2025": 这个选项设置了一个环境变量MINIO_ACCESS_KEY,它是MinIO的访问密钥,用于身份验证。这里设置为admin2025。-e "MINIO_SECRET_KEY=admin2025": 同样,这个选项设置了一个环境变量MINIO_SECRET_KEY,它是MinIO的密钥,也用于身份验证。这里也设置为admin2025。-v D:\DockerData\minio\data:/data: 这个选项将宿主机的本地路径D:\DockerData\minio\data挂载到容器的/data路径。这是MinIO存储数据的目录。-v D:\DockerData\minio\config:/root/.minio: 这个选项将宿主机的本地路径D:\DockerData\minio\config挂载到容器的/root/.minio路径。这是MinIO存储配置文件的目录。quay.io/minio/minio: 这是MinIO服务器镜像的名称,表示容器将从这个镜像启动。server /data --console-address ":9090" -address ":9000": 这是传递给MinIO服务器镜像的命令参数。server /data告诉MinIO使用/data目录作为存储位置。--console-address ":9090"指定了MinIO控制台(Web界面)的地址和端口。-address ":9000"指定了MinIO API服务器的地址和端口。
四、浏览器登录 minio
输入网址:http://127.0.0.1:9090/login
使用刚刚设置的账号密码登录:admin2025 admin2025
到这里minio就启动好了

五、创建用户,组,bucket....
创建admin用户:

创建admin组:

创建accessKey和secretKe:

创建bucket:

六、使用java进行文件上传下载删除操作
0)导入依赖
Maven
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.14</version>
</dependency>Gradle
dependencies {
implementation("io.minio:minio:JAVAVERSION")
}1)配置yml

# minio配置 minio: endpoint: http://127.0.0.1:9000 username: admin password: cepc_2025@admin bucketName: cepc
2)创建配置类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
private String endpoint;
private String username;
private String password;
private String bucketName;
}3)创建工具类
@Slf4j
@Component
public class UploadUtil {
@Autowired
private MinioProperties minioProperties;
/**
* 上传文件到minio并重命名
*
* @param multipartFile 上传文件
* @param dirPath 文件上传路径(例如:images/pdf)
* @param newFileName 新文件名
* @return eTag
* @throws Exception
*/
public String uploadMinioRename(MultipartFile multipartFile, String dirPath, String newFileName) throws Exception {
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getUsername(), minioProperties.getPassword())
.build();
// 完整的对象名称,包括目录路径和文件名
String objectName = dirPath + "/" + newFileName;
// 上传文件
try (InputStream is = multipartFile.getInputStream()) {
minioClient.putObject(
PutObjectArgs.builder().bucket(minioProperties.getBucketName()).object(objectName).stream(
is, multipartFile.getSize(), -1)
.contentType(multipartFile.getContentType())
.build());
} catch (MinioException e) {
log.error("Error occurred: {}", e);
throw new Exception("Error occurred while uploading the file.", e);
}
return objectName;
}
/**
* 删除MinIO上的文件
*
* @param objectName 要删除的文件对象名称(路径)
* @throws Exception 如果删除过程中发生错误
*/
public void deleteMinioObject(String objectName) throws Exception {
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getUsername(), minioProperties.getPassword())
.build();
try {
// 删除对象
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket(minioProperties.getBucketName())
.object(objectName)
.build());
} catch (MinioException e) {
log.error("Error occurred: {}", e);
throw new Exception("Error occurred while deleting the file.", e);
}
}
/**
* 下载MinIO上的文件
*
* @param path 文件对象路径
* @param fileSuffix 文件后缀
* @throws Exception
*/
public void downloadMinioObject(String path, HttpServletResponse response, String fileSuffix) throws Exception {
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getUsername(), minioProperties.getPassword())
.build();
try {
// 设置响应头和内容类型
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + "response."+fileSuffix + "\"");
// 从MinIO获取文件
try (InputStream is = minioClient.getObject(
GetObjectArgs.builder()
.bucket(minioProperties.getBucketName())
.object(path)
.build());
OutputStream os = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.flush();
}
} catch (Exception e) {
// 处理异常,设置错误状态码
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
// 可以选择记录日志或者发送错误消息
e.printStackTrace();
}
}
}4)POSTMAN测试接口
这边的话controller,service等等我就不贴出来了,根据业务逻辑调用工具类里面对应的方法即可
上传:


成功上传
以上就是SpringBoot使用minio进行文件管理的流程步骤的详细内容,更多关于SpringBoot minio文件管理的资料请关注脚本之家其它相关文章!
