SpringBoot使用Minio存储文件,并进行上传接口开发

本篇记录一下我的学习过程中学到的一些知识。

1.首先介绍一下什么是Minio

我们平时的学习过程可能只是把文件存储在了本地,但是在实际开发中这肯定是不现实的,所以这时候我们就用到了Minio

MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据,比如文件、图片、视频等,而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用,同时也非常强大,可以在你的应用程序中方便地集成。

2.Docker 搭建 Minio 服务

2.1下载 Minio 镜像

在浏览器中访问docker仓库地址:https://hub.docker.com/ , 输入关键词 minio/minio, 找到 Minio 镜像:

点击进去,点击 Tags 标签选项,版本你可以自己选,我这里先选最新的版本

2.2 下载 Minio 镜像

点击右侧复制命令,打开命令行,执行该命令拉取镜像:

docker pull minio/minio:RELEASE.2023-09-30T07-02-29Z

镜像下载成功后,执行 docker images , 如果列表中有 minio/minio 镜像,则表示镜像下载成功了

2.3 新建数据挂载目录

挂载的目的是防止容器重启后,会导致数据丢失的问题。   如果只是练习的话这步可以省略

在你电脑上建个文件夹作为挂载目录,我这里D盘的docker目录下的minio目录

2.4运行 Docker Minio 容器

docker run -d -p 9000:9000 -p 9090:9090 --name minio -v D:\docker\minio\data:/data -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=123456789" minio/minio:RELEASE.2023-09-30T07-02-29Z server /data --console-address ":9090"

大概解释一下上述命令各选项的含义,docker的知识大家自己可以去写一下:

  • docker run: 运行 Docker 容器的命令。
  • -d : 表示后台运行该容器;
  • -p 9000:9000: 将宿主机的 9000 端口映射到容器的 9000 端口。MinIO 默认的 HTTP API 端口是 9000。
  • -p 9090:9090: 将宿主机的 9090 端口映射到容器的 9090 端口。这是 MinIO 的 Web 控制台的端口。
  • --name minio
### 如何在 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]。因此建议用户依据具体应用场景权衡利弊之后选取最适合自己的解决方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值