SpringBoot整合minio,文件的上传下载,批量获取

Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。基于Apache License v2.0开源协议的对象存储项目,采用Golang实现,客户端支Java,Python,Javacript, Golang语言。

其设计的主要目标是作为私有云对象存储的标准方案。主要用于存储海量的图片,视频,文档等。非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

minio的服务部署这里就不叙述了。

1.pom.xml中引用minio的依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.3</version>
</dependency>

2.application.yml配置文件中配置minio的信息

minio:
  accessKey: ********
  secretKey: **********
  bucketName: yanliang
  endPoint: http://127.0.0.1:9000  #换成自己的minio服务器地址
  url: http://127.0.0.1:9000
  #文件的过期时间(分钟)
  expires: 5

3.写一个minio的工具类UploadMinioUtil

package com.yunmao.yanliang.util;

import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.Result;
import io.minio.errors.MinioException;
import io.minio.messages.Item;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

/**
 * minio工具类
 * @author 言凉
 */
@Component
public class UploadMinioUtil {
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;
    @Value("${minio.bucketName}")
    private String bucketName;
    @Value("${minio.endPoint}")
    private String endPoint;
    @Value("${minio.url}")
    private String url;
    @Value("${minio.expires}")
    private int expires;

    /**
     * 上传文件至Minio文件系统
     *
     * @param objectName 存在Minio系统中的路径
     * @param filePath   上传文件的路径
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws XmlPullParserException
     */
    public String uploadFileMinio(String objectName, String filePath) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
        String fileUrl = "";
        try {
            // 使用Minio服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);

            // 检查存储桶是否已经存在
            boolean isExist = minioClient.bucketExists(bucketName);
            if (isExist) {
                System.out.println("Bucket already exists.");
            } else {
                // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
                minioClient.makeBucket(bucketName);
            }
            // 使用putObject上传一个文件到存储桶中。
            minioClient.putObject(bucketName, objectName, filePath);
            // 返回对象名
            fileUrl = objectName;
        } catch (MinioException e) {
            e.printStackTrace();
        }

        return fileUrl;
    }

    /**
     * 查询Minio文件系统中文件的url
     *
     * @param objectName 文件路径
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws XmlPullParserException
     * @throws MinioException
     */
    public String getFileMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
        String newFileUrl = "";
        try {
            // 使用Minio服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);

            // 使用putObject上传一个文件到存储桶中。
            String fileUrl = minioClient.presignedGetObject(bucketName, objectName, 60 * expires);
            URL u = new URL(fileUrl);
            String file = u.getFile();
            newFileUrl = url + file;
        } catch (MinioException e) {
            e.printStackTrace();
        }
        return newFileUrl;
    }

    /**
     * 查询Minio文件系统中文件是否存在
     *
     * @param objectName
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws XmlPullParserException
     * @throws MinioException
     */
    public Boolean statFileMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
        Boolean isExist = false;
        try {
            // 使用Minio服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);
            // 获得对象的元数据。
            ObjectStat objectStat = minioClient.statObject(bucketName, objectName);
            isExist = true;
        } catch (MinioException e) {
            e.printStackTrace();
            isExist = false;
        }

        return isExist;
    }

    /**
     * 删除Minio文件系统中的文件
     *
     * @param objectName 文件路径
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws XmlPullParserException
     * @throws MinioException
     */
    public void deleteFileMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
        try {
            // 使用Minio服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);

            // 从mybucket中删除myobject。
            minioClient.removeObject(bucketName, objectName);

        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
    /**
     * 批量获取minio文件夹下的所有文件
     *
     * @param objectName 文件路径
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws XmlPullParserException
     * @throws MinioException
     */
    public List<String> getFileListMinio(String objectName) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
        Iterable<Result<Item>> files = null;
        List<String> list = new ArrayList<>();
        try {
            // 使用Minio服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = new MinioClient(endPoint, accessKey, secretKey);

            // 使用putObject上传一个文件到存储桶中。
            files = minioClient.listObjects(bucketName,objectName);
            for(Result<Item> result: files){
                String objName=result.get().objectName();
                String fileurl = this.getFileMinio(objName);
                list.add(fileurl);
            }

        } catch (MinioException e) {
            e.printStackTrace();
        }
        return list;
    }
}

4.实现,在需要对接minio的地方先注入minio工具类

@Autowired
private UploadMinioUtil uploadMinioUtil;

实现用uploadMinioUtil.方法实现文件的上传,下载,删除,批量获取等操作

说明:方法中的objectName值为文件在minio系统中的路径

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
整合MinioSpring Boot可以通过以下几个步骤完成: 1. 首先,需要在pom.xml文件中添加Minio的依赖项。你可以使用以下代码片段添加依赖项: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.3</version> </dependency> ``` 2. 接下来,在application.yml(或application.properties)文件中配置Minio的连接信息。你需要提供Minio服务端的地址、访问密钥和存储桶名称。以下是一个示例: ```yaml minio: url: 129.0.0.1:9000 access-key: minioadmin secret-key: minioadmin bucket-name: ding_server ``` 3. 最后,在你的代码中使用Minio客户端库进行操作。你可以根据需要使用Minio的API来上传、下载和管理对象。以下是一个使用Minio客户端库的示例: ```java import io.minio.MinioClient; import io.minio.errors.MinioException; // 创建Minio客户端 MinioClient minioClient = new MinioClient("http://localhost:9000", "minioadmin", "minioadmin"); // 上传对象到Minio存储桶 minioClient.putObject("your-bucket-name", "your-object-name", "/path/to/your-file"); // 下载对象从Minio存储桶 minioClient.getObject("your-bucket-name", "your-object-name", "/path/to/save/downloaded-file"); // 列出Minio存储桶中的所有对象 Iterable<Result<Item>> results = minioClient.listObjects("your-bucket-name"); for (Result<Item> result : results) { Item item = result.get(); System.out.println(item.objectName()); } // 删除Minio存储桶中的对象 minioClient.removeObject("your-bucket-name", "your-object-name"); ``` 以上就是在Spring Boot整合Minio的基本步骤。你可以根据具体需求进行进一步的操作和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [springboot整合minio](https://blog.csdn.net/qq_36090537/article/details/128100423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [SpringBoot整合Minio](https://blog.csdn.net/weixin_46573014/article/details/128476327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值