MinIO 基于 python 把目录下的文件上传到 minio

  1. 核心方法开发
  2. 部署
    1. requirements.txt
    2. dockerfile

核心方法开发

# 级联遍历目录,获取目录下的所有文件路径
def find_filepaths(dir):
    import os
    result = []
    for root, dirs, files in os.walk(dir):
        for name in files:
            filepath = os.path.join(root, name)
            if os.path.exists(filepath):
                result.append(filepath)
    return result
# 初始化客户端
def get_minio_client():
    from minio import Minio
    # 使用endpoint、access key和secret key来初始化minioClient对象。
    minio_client = Minio(config["endpoint"],
                         access_key=config["access_key"],
                         secret_key=config["secret_key"],
                         secure=False)
    return minio_client
# 判断桶在不在,不在就创建
def minio_make_bucket_ifnotexist(minio_client, bucket_name):
    from minio.error import S3Error
    bucket_name = bucket_name.replace('_', "-")
    # 调用make_bucket来创建一个存储桶。
    # 判断桶是否已经存在,不存在则创建,存在忽略
    try:
        if not minio_client.bucket_exists(bucket_name):
            logging.info("该存储桶不存在:" + bucket_name)
            minio_client.make_bucket(bucket_name)
            logging.info("存储桶创建:" + bucket_name)
    except S3Error as e:
        if "InvalidAccessKeyId" in str(e):
            logging.error("minio 的 access_key 可能有误(仅供排错参考)")
        elif "SignatureDoesNotMatch" in str(e):
            logging.error("minio 的 secret_key 可能有误(仅供排错参考)")
        else:
            logging.error("minio 的 endpoint、access_key、secret_key 可能有误(仅供排错参考)")
        raise e
# 文件上传
def minio_upload_file(minio_client, bucket_name, object_name, file_path):
    logging.info(file_path)
    result = minio_client.fput_object(bucket_name, object_name, file_path)
# 磁盘-minio-java 三者之间的路径映射关系处理
def get_object_name(base_path, attach_path):
    relative_path = os.path.realpath(attach_path).replace(os.path.realpath(base_path), "")
    relative_path = relative_path.replace(os.sep, "/")
    if (relative_path.startswith("/")):
        relative_path = relative_path[1:]
    object_name = relative_path
    return object_name

部署

Minio 的需要基于 Python3.x,因此放到 centos 服务器上不能直接执行,

我们放到 docker 中执行吧~

requirements.txt

打开程序目录,执行如下代码生成 requirements.txt 文件

pip freeze >requirements.txt

注意,这里代码执行后,我后来校验发现还是少了个依赖,手动添加下:configobj==5.0.6

定义一个项目目录,把 requirements.txt、和程序文件都上传到服务器上

dockerfile

mkdir /data/minio_uploader

编写 dockerfile

cd /data/minio_uploader
vim dockerfile

内容

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./minio_uploader.py" ]
docker build -t minio-uploader .
docker run -it --rm --name my-running-app -v <要传的目录>:/data  minio-uploader

转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:MinIO 基于 python 把目录下的文件上传到 minio

字数:517

本文作者:夏来风

发布时间:2020-12-20, 23:41:36

原始链接:http://www.demo1024.com/blog/minio-dev-python3/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。