Windows中python3使用minio

minio.exe 和 mc.exe下载地址
在这里插入图片描述

# http://192.168.16.174:9000
# admin admin123!@#
# E:\tool\minio\bin>set MINIO_ROOT_USER=admin
# E:\tool\minio\bin>set MINIO_ROOT_PASSWORD=admin123!@#
# E:\tool\minio\bin>minio.exe server E:\tool\minio\data

# 配置minio 客户端mc
# mc alias set minio_server http://192.168.16.174:9000 admin admin123!@#
# 帮助
# mc --help
# 查看存储桶列表
# mc ls minio_server
# 列出存储桶路径文件列表
# mc ls minio_server/labr/backend/ask/202411
# 创建一个新的存储桶
# mc mb minio_server/test-wf
# 删除存储桶
# mc rb minio_server/test-wf
# mc rb minio_server/test-wf --force
# 上传 下载 删除 文件

我本地文件夹结构
在这里插入图片描述
py安装minio

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple minio

python代码

from minio import Minio
from minio.error import S3Error
from datetime import datetime
import uuid


class MinioClientWrapper:
    """封装 MinIO 客户端操作类,提供对 MinIO 存储桶和对象的基本操作"""

    def __init__(self, endpoint, access_key, secret_key, secure=False):
        """
        初始化 Minio 客户端

        :param endpoint: MinIO 服务地址(例如:'192.168.16.174:9000')
        :param access_key: MinIO 访问密钥
        :param secret_key: MinIO 秘密密钥
        :param secure: 是否使用 https(默认为 False)
        """
        self.client = Minio(
            endpoint, access_key=access_key, secret_key=secret_key, secure=secure
        )

    def get_bucket_list(self):
        """列出所有存储桶"""
        try:
            buckets = self.client.list_buckets()
            if not buckets:
                print("当前没有存储桶。")
            for bucket in buckets:
                print(f"存储桶名称: {bucket.name}, 创建日期: {bucket.creation_date}")
        except S3Error as err:
            print(f"MinIO 连接错误: {err}")

    def create_bucket(self, bucket_name):
        """创建存储桶"""
        try:
            if not self.client.bucket_exists(bucket_name):
                self.client.make_bucket(bucket_name)
                print(f"存储桶 {bucket_name} 创建成功。")
            else:
                print(f"存储桶 {bucket_name} 已存在。")
        except S3Error as err:
            print(f"创建存储桶 {bucket_name} 时出错: {err}")

    def delete_bucket(self, bucket_name):
        """删除存储桶"""
        try:
            if self.client.bucket_exists(bucket_name):
                self.client.remove_bucket(bucket_name)
                print(f"存储桶 {bucket_name} 删除成功。")
            else:
                print(f"存储桶 {bucket_name} 不存在。")
        except S3Error as err:
            print(f"删除存储桶 {bucket_name} 时出错: {err}")

    def get_bucket_objects(self, bucket_name, prefix=""):
        """列出存储桶中的对象"""
        try:
            objects = list(
                self.client.list_objects(bucket_name, prefix=prefix)
            )  # 转换生成器为列表
            if not objects:
                print(f"存储桶 {bucket_name} 中没有符合条件的对象。")
            else:
                for obj in objects:
                    print(f"对象名称: {obj.object_name}, 大小: {obj.size} 字节")
        except S3Error as err:
            print(f"获取存储桶 {bucket_name} 对象列表时出错: {err}")

    def put_object(self, bucket_name, object_name, file_path):
        """上传文件到存储桶"""
        try:
            self.client.fput_object(bucket_name, object_name, file_path)
            print(
                f"文件 {file_path} 已成功上传至存储桶 {bucket_name},对象名称:{object_name}"
            )
        except S3Error as err:
            print(f"上传文件 {file_path} 到存储桶 {bucket_name} 时出错: {err}")

    def get_object(self, bucket_name, object_name, file_path):
        """从存储桶下载文件"""
        try:
            self.client.fget_object(bucket_name, object_name, file_path)
            print(f"文件 {object_name} 已成功下载至 {file_path}")
        except S3Error as err:
            print(f"下载文件 {object_name} 从存储桶 {bucket_name} 时出错: {err}")

    def delete_object(self, bucket_name, object_name):
        """删除存储桶中的对象"""
        try:
            self.client.remove_object(bucket_name, object_name)
            print(f"对象 {object_name} 已成功从存储桶 {bucket_name} 中删除。")
        except S3Error as err:
            print(f"删除对象 {object_name} 时出错: {err}")


# 以下是如何使用封装后的 MinioClientWrapper 类进行操作


def main():
    # 配置 MinIO 客户端参数
    endpoint = "192.168.16.174:9000"
    access_key = "admin"
    secret_key = "admin123!@#"

    # 创建 MinIO 客户端实例
    minio_client = MinioClientWrapper(endpoint, access_key, secret_key, secure=False)

    # 获取存储桶列表
    minio_client.get_bucket_list()

    # 创建存储桶
    bucket_name = "test-bucket"
    minio_client.create_bucket(bucket_name)

    # 上传文件到存储桶
    unique_id = str(uuid.uuid4())
    file_name = f"{unique_id}.dat"
    ymd = datetime.now().strftime("%Y%m%d")
    object_name = f"python/test/{ymd}/{file_name}"
    file_path = "mac_hash.dat"  # 本地文件路径
    minio_client.put_object(bucket_name, object_name, file_path)

    # 获取存储桶中的对象列表
    minio_client.get_bucket_objects(bucket_name, f"python/test/{ymd}/")

    # 下载文件
    download_path = "downloaded_file.dat"
    minio_client.get_object(bucket_name, object_name, download_path)

    # 删除对象
    minio_client.delete_object(bucket_name, object_name)

    # 删除存储桶
    minio_client.delete_bucket(bucket_name)


if __name__ == "__main__":
    main()


# 预览图片
# http://192.168.16.174:9000/labr/backend/ask/202411/20241129093312928457.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925930.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink在Linux系统上的安装与入门

一、Flink的引入 这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有Hadoop、Storm,以及后来的Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以内存为赌注,赢得了内存计…

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产

11月23日,芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位;并与香港科技大学校董会主席沈向洋展开深刻对话,涉及人工智能(AI)、计算力、领导…

unity工程转为安卓使用的aar文件

1.unity导出时选择安卓平台,导出的最终工程如下: 2.将该工程导入AndroidStudio里,File->new->import project, 选择上一步导出的文件夹。导入完成如下: 3.导入进来之后,手动在下方文件夹添加string文件&#xff…

【N 卡 掉驱动 Driver 】NVML ERROR: Driver Not Loaded

问题描述 输入 nvitop 时报错 NVML ERROR: Driver Not Loaded,重启问题依旧存在。 问题解决-重新下载驱动 进入官网选择合适自己的驱动版本 https://www.nvidia.cn/geforce/drivers/ 根据个人情况搜索后,选择最新的 Driver 进行下载,如果希…

C# 索引器(Indexer)

文章目录 前言一、索引器的语法规则二、索引器的用途及与属性的对比三、索引器的重载 前言 在 C# 编程中,索引器(Indexer)是一项极具特色且实用的语言特性,它赋予了对象一种独特的访问方式,使得对象能够如同数组一般&a…

Scrapy管道设置和数据保存

1.1 介绍部分: 文字提到常用的Web框架有Django和Flask,接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分: Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…

Oracle SCN与时间戳的映射关系

目录 一、基本概述 二、相关操作 三、参考文档 一、基本概述 Oracle 数据库中的 SYS.SMON_SCN_TIME 表是一个关键的内部表,主要用于记录过去时间段中SCN与具体的时间戳之间的映射关系。这种映射关系可以帮助用户将 SCN 值转换为可读性更强的时间戳,从而…

Maven install java heap space

Maven install java heap space 打包报错 Maven install java heap space 解决: vm option: -Xms1024m -Xmx1024m如果 vm配置了,还是一样报错,就重新选择JRE看看是否正确,idea会默认自己的环境,导致设置vm无效&…

深度学习——激活函数

一、人工神经元 1.1 构建人工神经元 人工神经元接受多个输入信息,对它们进行加权求和,再经过激活函数处理,最后将这个结果输出。 1.2 组成部分 输入(Inputs): 代表输入数据,通常用向量表示,每…

算法基础 - 求解非线性方程(二分迭代法)

文章目录 1. 基本思想2. 编程实现2.1. 非递归2.2. 递归方案 3. 总结 二分迭代法使用了二分算法思想求解非线性方程式。 下面要求使用二分迭代法求解: 2x3-5x-10 方程式,且要求误差不能大于10e-5。 二分迭代法也只是近似求解算法。 所谓求解&#xff…

如何将 GitHub 私有仓库(private)转换为公共仓库(public)

文章目录 如何将 GitHub 私有仓库转换为公共仓库步骤 1: 登录 GitHub步骤 2: 导航到目标仓库步骤 3: 访问仓库设置步骤 4: 更改仓库可见性步骤 5: 确认更改步骤 6: 验证更改注意事项 如何将 GitHub 私有仓库转换为公共仓库 在软件开发领域,GitHub 是一个广受欢迎的…

SSM搭建(1)——配置MyBatis

目录 一、框架概述 1.什么是JDBC? 2.JDBC基本流程 3.JDBC的缺点 二、MyBatis的入门程序 1. 创建数据库和表结构 2. MyBatis入门流程总结 3. MyBatis的入门步骤 (1) 创建maven的项目,创建Java工程即可。 &…

Cesium 当前位置矩阵的获取

Cesium 位置矩阵的获取 在 3D 图形和地理信息系统(GIS)中,位置矩阵是将地理坐标(如经纬度)转换为世界坐标系的一种重要工具。Cesium 是一个强大的开源 JavaScript 库,用于创建 3D 地球和地图应用。在 Cesi…

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集 数据集分割 4070总图像数 训练组 87% 3551图片 有效集 9% 362图片 测试集 4% 157图片 预处理 自动定向…

Nginx:反向代理

目录 反向代理原理 反向代理配置 日志对比 反向代理原理 网站通过代理服务器发布,用户无需得知网站的实际地址,通过代理服务器进行请求与响应。 用户所有的网站请求报文与响应报文都被代理服务器拦截,在网络层将源地址和目的地址进行了修改…

【c++篇】:解读Set和Map的封装原理--编程中的数据结构优化秘籍

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 前言一.set和map的初步封装1.树的节点封装修改2.Find()查找函数3.红…

HASH256开源代码计算错误问题

计算量超500KB报错 OTA升级中可能会涉及到CRC、hash校验等算法,小编从网上抄到了HASH256的源码,拿来使用的时候却发现了一个问题,当源文件约大于500KB的时候会发现其计算出的hash值出现错误。 经过实际测试得知,当源文件大于约50…

vue3项目搭建-6-axios 基础配置

axios 基础配置 安装 axios npm install axios 创建 axios 实例,配置基地址,配置拦截器,目录:utils/http.js 基地址:在每次访问时,自动作为相对路径的根 // axios 基础封装 import axios from "axios";…

Golang项目:实现生产者消费者模式

one-one 先创建out.go目录与文件夹 // 定义了一个名为out的包,用于处理输出相关的功能。 package outimport "fmt"// Out结构体定义了一个channel,用于存储需要输出的数据。 type Out struct {data chan interface{} // data字段是一个inter…

说说Elasticsearch拼写纠错是如何实现的?

大家好,我是锋哥。今天分享关于【说说Elasticsearch拼写纠错是如何实现的?】面试题。希望对大家有帮助; 说说Elasticsearch拼写纠错是如何实现的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…