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文件管理的资料请关注脚本之家其它相关文章!