SpringBoot 整合 Minio 上传文件

本文介绍了如何使用SpringBoot整合Minio进行文件上传。Minio是一款高性能、分布式的对象存储系统,易于安装和使用。文章详细讲解了通过Docker安装Minio,以及创建Java客户端进行文件上传的步骤,包括配置依赖、创建Minio客户端和测试上传文件的Controller。

Minio

上传文件如果不使用云服务的话,需要本地搭建,一般选择 FastDFS 但是 FastDFS 安装比较复杂,今天了解一款安装使用更简单的存储系统 MinIO

MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。

MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。

MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。

在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品

安装 Minio

使用docker安装

拉取镜像

docker pull minio/minio
复制代码

启动

docker run -p 9000:9000 -p 9001:9001 -d --name minio -v /opt/docker/minio/data:/data -v /opt/docker/minio/config:/root/.minio -e "MINIO_ROOT_USER=minio" -e "MINIO_ROOT_PASSWORD=minio@123456" minio/minio server /data --console-address ":9000" --address ":9001"
复制代码

使用9000端口 登录控制台

创建存储桶

设置桶权限

创建 Java 客户端

依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>


    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- minio依赖       -->
    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.2.1</version>
    </dependency>

    <!-- hutool工具类       -->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.1.2</version>
    &l
### 如何在 MinIO 中配置桶的大小限制 MinIO 并未提供直接通过内置参数来限制某个特定存储桶总大小的功能[^1]。然而,可以通过外部手段实现这一目标,例如编写脚本监控存储桶的使用情况并采取相应措施。 以下是几种可能的方法: #### 方法一:利用第三方工具或自定义脚本 可以定期运行脚本来计算存储桶中的对象总量及其占用的空间,并根据预设阈值执行删除或其他操作。以下是一个简单的 Python 脚本示例,用于统计指定存储桶内的数据量: ```python import boto3 from botocore.exceptions import NoCredentialsError def calculate_bucket_size(bucket_name, endpoint_url, access_key, secret_key): session = boto3.session.Session() client = session.client( 's3', aws_access_key_id=access_key, aws_secret_access_key=secret_key, endpoint_url=endpoint_url ) total_size = 0 try: paginator = client.get_paginator('list_objects_v2') pages = paginator.paginate(Bucket=bucket_name) for page in pages: if 'Contents' not in page: continue for obj in page['Contents']: total_size += obj['Size'] return total_size / (1024 * 1024) # Convert to MB except NoCredentialsError as e: print(f"Credential error: {e}") return None bucket_name = "your-bucket-name" endpoint_url = "http://localhost:9000" # Replace with your MinIO URL access_key = "minio" secret_key = "minioadmin" size_in_mb = calculate_bucket_size(bucket_name, endpoint_url, access_key, secret_key) if size_in_mb is not None: print(f"The bucket '{bucket_name}' uses approximately {size_in_mb:.2f} MB.") ``` 此脚本会返回给定存储桶使用的空间大小(单位为MB),管理员可以根据实际需求设定警戒线,在达到一定数值时触发警告或者清理策略。 #### 方法二:基于配额管理插件 如果希望更自动化地处理这个问题,则可以考虑开发一个定制化的中间层服务作为代理访问入口点,该服务负责拦截所有的上传请求前先判断当前剩余可用额度是否充足再决定允许与否;另外也可以尝试寻找是否有现成的支持S3接口协议并且具备此类功能特性的网关软件产品集成进来一起工作。 需要注意的是,以上两种方式都需要额外的工作量来进行维护以及性能调优等工作。 --- ### 注意事项 尽管能够通过上述技术方案间接达成目的,但从官方文档来看目前尚无原生支持针对单一容器设置固定限额的能力存在[^4]。因此建议用户依据具体应用场景权衡利弊之后选取最适合自己的解决方案。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值