SpringBoot+MinIO 实现文件上传、读取、下载、删除

news/2024/10/17 14:18:04/
  • 一、 MinIO

  • 二、 MinIO安装和启动

  • 三、 pom.xml

  • 四、 applicatin.properties(配置文件)

  • 五、 编写Java业务类

  • 六、 MinIoController

  • 七、 调试结果


一、 MinIO

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

二、 MinIO安装和启动

由于MinIO是一个单独的服务器,需要单独部署,有关MinIO在Windows系统上的使用请查看以下博客。

  • https://blog.csdn.net/Angel_asp/article/details/128544612

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

三、 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 {@Autowiredprivate 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*/@PostConstructpublic 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 ? "删除成功" : "删除失败";}}


http://www.ppmy.cn/news/598252.html

相关文章

Mac 重命名快捷键

Mac 重命名文件或文件夹的快捷键很简单: 点击该文件或文件夹 按下回车键 enter 即可 在命令行中可以使用: 使command 空格 打开命令行 mv 命令 重命名文件或文件夹 mv a.txt b.txt

idea批量重命名(快捷键+全部替换两种方式)

一、重命名快捷键 1、选中类名&#xff0c;shiftF6 或 右击选择 Refactor&#xff0c;选择Rename 2、出现红框后可开始修改&#xff0c;会自动同步其他地方 二、替换 1、Ctrl C 复制类名&#xff0c;CtrlF搜索快捷键&#xff0c; 2、黄色显示命中的关键字&#xff0c;7matc…

mac 重命名文件快捷键

重命名文件or文件夹&#xff1a; 在windows上是 f2 在mac是 回车键 更多 同时 进入文件夹的快捷键是 commandO 或者 ⌘&#xff08;command&#xff09;↓ ⌘&#xff08;command&#xff09;↑是后退。 新建文件夹 Shift键Command键N键 删除文件夹 commanddelete

idea常用快捷键——批量重命名方法名和变量名

快捷键&#xff1a;shift F6 使用场景&#xff1a;我们写代码的时候可能会遇到这样的情况&#xff0c;1.变量名命名不规范&#xff0c;我们为变量和方法命名的时候需要做到见名知意&#xff0c;但是对于刚入门的人来说&#xff0c;喜欢使用例如 int i 这样的变量&#xff…

批量重命名,文件夹重命名的五种方式分享

在工作中会需要修改大量文件夹名称&#xff0c;有些小伙伴不知道如何批量修改&#xff0c;就只能手动一个一个去修改&#xff0c;这种方法是速度最慢的方法&#xff0c;需要消耗大量的时间&#xff0c;小编分享一个批量重命名的方法&#xff0c;一起来看看吧&#xff01; 第一步…

文件夹如何改名,教你批量重命名文件夹名方法

你还在一个一个的修改文件夹名吗&#xff1f;来看下面这个技巧&#xff0c;教你用批量重命名的方法&#xff0c;快速修改多个文件夹名。下面就看操作步骤。希望以后可以用到。 演示需要工具&#xff1a; 下载文件批量改名高手 文件夹 开始操作&#xff1a; 进入到软件中&…

电脑里文件名称怎么快速重命名

我们在使用电脑办公的过程中&#xff0c;都要处理各种文件&#xff0c;也避免不了修改文件名等操作&#xff0c;那么如何快速在多个文件名称添加文字并快速重命名呢&#xff1f;下面就是具体的批量重命名的步骤了。一起来看看。 准备工具&#xff1a; 下载一个文件批量改名高手…

libjpeg-turbo库android平台编译

1.克隆 : GitHub - libjpeg-turbo/libjpeg-turbo: Main libjpeg-turbo repository git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git 2.准备NDK ,NDK版本小于或者16b 可使用gcc ,大于或者等于17c使用clang TOOLCHAIN={"gcc" or "clang"-…