You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将本地目录中的所有文件上传至MinIO?是否已有现成实现方法?

嘿,批量上传本地目录到MinIO其实有好几种靠谱的实现方式,我给你整理几个最常用的,你可以根据自己的场景选:

方法1:使用MinIO官方CLI工具(mc)

这是最省心的官方方案,不需要写代码,几步就能搞定:

  1. 先安装MinIO CLI(mc),各个系统的安装包直接从官方渠道获取配置即可
  2. 配置你的MinIO服务器别名:
    mc alias set myminio http://your-minio-endpoint:port your-access-key your-secret-key
    
  3. 执行批量上传命令:
    • 如果只是一次性上传目录下所有文件(保留本地目录结构),用cp加递归参数:
      mc cp --recursive /path/to/your/local/folder myminio/your-target-bucket/
      
    • 如果需要双向同步(本地增删改都会同步到MinIO,适合定期备份),用mirror命令:
      mc mirror /path/to/your/local/folder myminio/your-target-bucket/
      

    注意:mirror会删除MinIO中本地已不存在的文件,如果只是单向上传,优先用cp --recursive

方法2:用MinIO Python SDK自定义脚本

如果需要加一些自定义逻辑(比如过滤特定后缀的文件、上传前校验、异常重试),用Python脚本更灵活:

  1. 先安装MinIO Python库:
    pip install minio
    
  2. 编写上传脚本示例:
    import os
    from minio import Minio
    from minio.error import S3Error
    
    def upload_directory_to_minio(local_dir, bucket_name, minio_client):
        # 遍历本地目录所有文件
        for root, dirs, files in os.walk(local_dir):
            for file in files:
                local_file_path = os.path.join(root, file)
                # 计算相对路径,保持MinIO中的目录结构和本地一致
                relative_path = os.path.relpath(local_file_path, local_dir)
                try:
                    # 上传文件
                    minio_client.fput_object(
                        bucket_name,
                        relative_path,
                        local_file_path
                    )
                    print(f"成功上传: {relative_path}")
                except S3Error as e:
                    print(f"上传失败 {relative_path}: {e}")
    
    if __name__ == "__main__":
        # 初始化MinIO客户端
        minio_client = Minio(
            "your-minio-endpoint:port",
            access_key="your-access-key",
            secret_key="your-secret-key",
            secure=False,  # 如果用HTTPS就设为True
        )
    
        # 检查目标桶是否存在,不存在就创建
        bucket_name = "your-target-bucket"
        if not minio_client.bucket_exists(bucket_name):
            minio_client.make_bucket(bucket_name)
    
        # 本地目录路径
        local_directory = "/path/to/your/local/folder"
        upload_directory_to_minio(local_directory, bucket_name, minio_client)
    
方法3:Shell脚本(适合Linux/macOS用户)

如果习惯用命令行,写个简单的Shell脚本也能实现批量上传:

#!/bin/bash

# 配置参数
LOCAL_DIR="/path/to/your/local/folder"
MINIO_ALIAS="myminio"  # 之前用mc alias set配置的别名
TARGET_BUCKET="your-target-bucket"

# 遍历目录下所有文件并上传
find "$LOCAL_DIR" -type f | while read -r FILE; do
    # 计算相对路径,保持目录结构
    RELATIVE_PATH="${FILE#$LOCAL_DIR/}"
    # 执行上传
    mc cp "$FILE" "$MINIO_ALIAS/$TARGET_BUCKET/$RELATIVE_PATH"
    echo "上传完成: $RELATIVE_PATH"
done

保存为upload_to_minio.sh,赋予执行权限chmod +x upload_to_minio.sh后直接运行就行。


内容的提问来源于stack exchange,提问作者Willy RL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:17:31