• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
python小小Q
帮助1


一、 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

  1.  
    <dependency>
  2.  
        <groupId>org.projectlombok</groupId>
  3.  
        <artifactId>lombok</artifactId>
  4.  
        <version>1.18.16</version>
  5.  
    </dependency>
  6.  
    <!-- SpringBoot Web容器 -->
  7.  
    <dependency>
  8.  
        <groupId>org.springframework.boot</groupId>
  9.  
        <artifactId>spring-boot-starter-web</artifactId>
  10.  
    </dependency>
  11.  
    <dependency>
  12.  
        <groupId>io.minio</groupId>
  13.  
        <artifactId>minio</artifactId>
  14.  
        <version>8.3.4</version>
  15.  
    </dependency>
学新通

四、 applicatin.properties(配置文件)

  1.  
    # 设置单个文件大小
  2.  
    spring.servlet.multipart.max-file-size= 50MB
  3.  
    #minio文件服务器配置
  4.  
    s3.url=http://localhost:9000
  5.  
    s3.accessKey=admin
  6.  
    s3.secretKey=admin123
  7.  
    s3.bucketName=test

五、 编写Java业务类

minio涉及到的方法有:判断存储桶是否存在,创建存储桶,上传文件,读取文件、下载文件,删除文件等操作

1、StorageProperty 存储属性类:

  1.  
    import lombok.Data;
  2.  
    import org.springframework.boot.context.properties.ConfigurationProperties;
  3.  
    import org.springframework.stereotype.Component;
  4.  
     
  5.  
     
  6.  
    /**
  7.  
     * @Author yang
  8.  
     * @Date 2023/1/3 14:00
  9.  
     * @Version 1.0
  10.  
     */
  11.  
    @Data
  12.  
    @Component
  13.  
    @ConfigurationProperties(prefix = "s3")
  14.  
    public class StorageProperty {
  15.  
        private String url;
  16.  
        private String accessKey;
  17.  
        private String secretKey;
  18.  
    //    private long callTimeOut = 60000;
  19.  
    //    private long readTimeOut = 300000;
  20.  
    }
学新通

2、minio 配置类:

  1.  
    import io.minio.BucketExistsArgs;
  2.  
    import io.minio.MinioClient;
  3.  
    import io.minio.messages.Bucket;
  4.  
    import lombok.SneakyThrows;
  5.  
    import lombok.extern.slf4j.Slf4j;
  6.  
    import org.springframework.beans.factory.annotation.Autowired;
  7.  
    import org.springframework.context.annotation.Configuration;
  8.  
    import org.springframework.stereotype.Component;
  9.  
     
  10.  
    import javax.annotation.PostConstruct;
  11.  
    import java.util.List;
  12.  
     
  13.  
    /**
  14.  
     * @Author yang
  15.  
     * @Date 2023/1/3 14:03
  16.  
     * @Version 1.0
  17.  
     */
  18.  
    @Slf4j
  19.  
    @Component
  20.  
    @Configuration
  21.  
    public class MinioClientConfig {
  22.  
     
  23.  
        @Autowired
  24.  
        private StorageProperty storageProperty;
  25.  
     
  26.  
        private static MinioClient minioClient;
  27.  
     
  28.  
     
  29.  
        /**
  30.  
         * @description: 获取minioClient
  31.  
         * @date 2021/6/22 16:55
  32.  
         * @return io.minio.MinioClient
  33.  
         */
  34.  
        public static MinioClient getMinioClient(){
  35.  
            return minioClient;
  36.  
        }
  37.  
     
  38.  
        /**
  39.  
         * 判断 bucket是否存在
  40.  
         *
  41.  
         * @param bucketName:
  42.  
         *            桶名
  43.  
         * @returnboolean
  44.  
         * @date : 2020/8/16 20:53
  45.  
         */
  46.  
        @SneakyThrows(Exception.class)
  47.  
        public static boolean bucketExists(String bucketName) {
  48.  
            return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
  49.  
        }
  50.  
     
  51.  
     
  52.  
        /**
  53.  
         * 获取全部bucket
  54.  
         *
  55.  
         * @param :
  56.  
         * @return: java.util.List<io.minio.messages.Bucket>
  57.  
         * @date : 2020/8/16 23:28
  58.  
         */
  59.  
        @SneakyThrows(Exception.class)
  60.  
        public static List<Bucket> getAllBuckets() {
  61.  
            return minioClient.listBuckets();
  62.  
        }
  63.  
     
  64.  
        /**
  65.  
         * 初始化minio配置
  66.  
         *
  67.  
         * @param :
  68.  
         * @return: void
  69.  
         * @date : 2020/8/16 20:56
  70.  
         */
  71.  
        @PostConstruct
  72.  
        public void init() {
  73.  
            try {
  74.  
                minioClient = MinioClient.builder()
  75.  
                        .endpoint(storageProperty.getUrl())
  76.  
                        .credentials(storageProperty.getAccessKey(), storageProperty.getSecretKey())
  77.  
                        .build();
  78.  
            } catch (Exception e) {
  79.  
                e.printStackTrace();
  80.  
                log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
  81.  
            }
  82.  
        }
  83.  
     
  84.  
    }
学新通

六、 MinIoController

文件上传、文件读取、文件下载、文件删除接口如下:

  1.  
    /**
  2.  
     * @Author yangb
  3.  
     * @Date 2022/11/27 15:55
  4.  
     * @Version 1.0
  5.  
     */
  6.  
    @RestController
  7.  
    @RequestMapping("/minio")
  8.  
    public class MinIoController extends BaseController {
  9.  
     
  10.  
        MinioUtil minioUtil = new MinioUtil();
  11.  
     
  12.  
        /**
  13.  
         * 上传文件
  14.  
         * @param file
  15.  
         * @return
  16.  
         */
  17.  
        @PostMapping("/uploadFile")
  18.  
        public AjaxResult uploadFile(@RequestBody MultipartFile file) {
  19.  
            MinioClient minioClient = MinioClientConfig.getMinioClient();
  20.  
            if (minioClient == null) {
  21.  
                return AjaxResult.error("连接MinIO服务器失败"null);
  22.  
            }
  23.  
            ResultEntity<Map<StringObject>> result = minioUtil.minioUpload(file, "", "data-enpower");
  24.  
            if (result.getCode() == 0) {
  25.  
                return AjaxResult.success("上传成功");
  26.  
            } else {
  27.  
                return AjaxResult.error("上传错误!!!");
  28.  
            }
  29.  
        }
  30.  
     
  31.  
        /**
  32.  
         * 获取文件预览地址
  33.  
         * @param fileName
  34.  
         * @return
  35.  
         */
  36.  
        @RequestMapping("/getRedFile")
  37.  
        public AjaxResult getRedFile(@RequestBody String fileName) {
  38.  
            MinioClient minioClient = MinioClientConfig.getMinioClient();
  39.  
            if (minioClient == null) {
  40.  
                return AjaxResult.error("连接MinIO服务器失败"null);
  41.  
            }
  42.  
            String url = minioUtil.getPreviewFileUrl("data-enpower",fileName);
  43.  
            return AjaxResult.success(url);
  44.  
        }
  45.  
     
  46.  
        /**
  47.  
         * 下载文件
  48.  
         * @param fileName
  49.  
         * @param response
  50.  
         * @return
  51.  
         */
  52.  
        @RequestMapping("/downloadFile")
  53.  
        public String downloadFile(@RequestParam String fileName, HttpServletResponse response) {
  54.  
            MinioClient minioClient = MinioClientConfig.getMinioClient();
  55.  
            if (minioClient == null) {
  56.  
                return "连接MinIO服务器失败";
  57.  
            }
  58.  
            return minioUtil.downloadFile("data-enpower",fileName,response) != null ? "下载成功" : "下载失败";
  59.  
        }
  60.  
     
  61.  
        /**
  62.  
         * 删除文件
  63.  
         *
  64.  
         * @param fileName 文件路径
  65.  
         * @return
  66.  
         */
  67.  
        @PostMapping("/deleteFile")
  68.  
        public String deleteFile(String fileName) {
  69.  
            MinioClient minioClient = MinioClientConfig.getMinioClient();
  70.  
            if (minioClient == null) {
  71.  
                return "连接MinIO服务器失败";
  72.  
            }
  73.  
            boolean flag = minioUtil.deleteFile("data-enpower",fileName);
  74.  
            return flag == true ? "删除成功" : "删除失败";
  75.  
        }
  76.  
     
  77.  
     
  78.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibheaf
系列文章
更多 icon
同类精品
更多 icon
继续加载