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

这篇具有很好参考价值的文章主要介绍了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系统中的路径文章来源地址https://www.toymoban.com/news/detail-653272.html

到了这里,关于SpringBoot整合minio,文件的上传下载,批量获取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    一、 MinIO 二、 MinIO安装和启动 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 编写Java业务类

    2024年02月09日
    浏览(47)
  • SpringBoot整合Hutool实现文件上传下载

    我相信我们在日常开发中,难免会遇到对各种媒体文件的操作,由于业务需求的不同对文件操作的代码实现也大不相同 maven配置 文件类 文件接口  配置静态资源映射

    2024年02月02日
    浏览(69)
  • 【分布式文件存储】MinIO部署及实现文件上传下载

    目录 概述 MinIO集群部署 准备docker-compose.yml 测试启动 MinIO用户管理 Buckets管理  创建Buckets MinIO客户端 引入依赖   文件上传下载Demo 调用API碰到的问题 MinIO | 高性能, Kubernetes 原生对象存储 MinIO是全球领先的对象存储先锋,目前在全世界有数百万的用户。 高性能 ,在标准硬件

    2024年02月07日
    浏览(59)
  • 【minio】Ubuntu安装MinIO文件服务器并通过C++上传下载

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍MinIO的使用。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 MinIO是一种高性能、可扩展的 对象存储服务 ,它可以在私有云、公共云和边缘计

    2024年02月08日
    浏览(56)
  • Java实现minio上传、下载、删除文件,支持https访问

    MinIO 是一款高性能、分布式的对象存储系统,Minio是基于Go语言编写的对象存储服务,适合于存储大容量非结构化的数据,例如图片、音频、视频、备份数据等 , 传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。 导入minio依赖包 application.yml配置文件 配置

    2024年02月05日
    浏览(51)
  • minio-docker单节点部署SDK测试文件上传下载

    目录 一,docker部署minio单节点单磁盘 二,SDK测试上传下载 1.拉取镜像 2.查看镜像 3.启动minio(新版本) 创建本机上的挂载目录,这个可以自己指定。 -d --restart=always是容器自启动,建议不要带。 增加这行参数,执行docker stop的时候不管用,他会立马又自己启动起来,只能强制删

    2024年04月28日
    浏览(30)
  • minio + linux + docker + spring boot实现文件上传与下载

    检查linux内核,必须是3.10以上 安装docker 启动docker 搜索镜像 拉取镜像 启动minio -p: 指定端口映射,格式为:主机端口:容器端口 (这里注意要映射两个,否则API会访问不到) -e “MINIO_ROOT_USER=vinci” minio用户名; -e MINIO_SECRET_KEY=123456 minio 密码 -d: 后台运行容器,并返回容器ID; -

    2024年02月07日
    浏览(59)
  • MINIO服务器基于AWS S3 SDK 文件分片上传及下载(C++实现)

    安装环境依赖: 获取SDK源码并安装: 项目中CMakeLists.txt配置: SDK文档资料 C++_SDK.pdf 实现下载的整体类代码下载 具体内容如下

    2024年04月10日
    浏览(68)
  • SpringBoot+vue文件上传&下载&预览&大文件分片上传&文件上传进度

    SpringBoot+vue 大文件分片下载 Blob File spark-md5根据文件内容生成hash 大文件分片上传(批量并发,手动上传)vue组件封装-form组件 vue上传大文件/视频前后端(java)代码 springboot+vue自定义上传图片及视频 SpringBoot + VUE实现前台上传文件获取实时进度( 使用commons-fileupload设置上传监听

    2024年02月05日
    浏览(77)
  • SpringBoot 如何实现文件上传和下载

    当今Web应用程序通常需要支持文件上传和下载功能,Spring Boot提供了简单且易于使用的方式来实现这些功能。在本篇文章中,我们将介绍Spring Boot如何实现文件上传和下载,同时提供相应的代码示例。 Spring Boot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种方式,用

    2024年02月15日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包