Linux安装Minio教程以及python、java上传文件到Minio的Demo

一、Minio介绍

官方解释:MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。MinIO是一款高性能、开源的分布式对象存储系统,它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

二、安装

MInIO的安装有很多方法、单实例的、集群分布式的、docker部署的、支持k8s的,我们使用最简单的一种安装方式:linux单节点安装。

如果希望对MinIO有深入的掌握,访问MinIO官网:https://min.io

1.创建一个minio文件夹

/software/minio

cd /data/software
mkdir minio
cd minio
wget wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2024-11-07T00-52-20Z

这里注意新版本https://dl.min.io/server/minio/release/linux-amd64/minio,之前试过新版本好像有点问题,,用的这个版本没问题 minio.RELEASE.2024-11-07T00-52-20Z,如果新版本出现问题,可以尝试一下这个版本

执行后在minio目录下,就会看到minio的文件

minio目录下,会出现一个minio目录

2.授权

chmod +x minio
 
# 创建minio文件存储目录及日志目录
mkdir data
mkdir logs

3.run.sh

minio/目录下,新建一个run.sh并编辑以下内容

vim run.sh,然后将以下内容保存到run.sh,并为其赋予执行权限chmod u+x run.sh

#!/bin/bash
export MINIO_ROOT_USER=root
export MINIO_ROOT_PASSWORD=123456
# nohup启动服务 指定文件存放路径 /root/data 还有设置日志文件路径 /root/minio/log
nohup ./minio server --address :9002 --console-address :9001 /data/software/minio/data > /data/software/minio/logs/minio.log 2>&1 &

注意:以前的老版本minio的配置中,配置用户名和密码时,是这两个参数:

MINIO_ACCESS_KEY 和MINIO_SECRET_KEY

而现在比较新的版本的minio,需要替换成MINIO_ROOT_USER和MINIO_ROOT_PASSWORD

并且用户名和密码都是由长度限制的,用户名长度不能小于3,密码不能小于8个字符

当然,minio安装完成,以及配置完成后,启动项目的run.sh的时候,如果你设置的用户名和密码长度不够,会有警告提示的,还有就是如果你的配置参数写成以前的旧版本的参数,也会提示你替换成对应的MINIO_ROOT_USER和MINIO_ROOT_PASSWORD

--address :9002 --console-address :9001 是配置端口,默认minio端口是9000,如果9000端口被占用了,那就加上这一串配置,端口号的冒号之前不需要特意写出ip,当然如果你的ip的动态变化的,而不是静态的话,前边的ip不用写上,当然最好是用静态的ip

4.启动

# 启动minio服务
cd /data/software/minio
./run.sh
# 查看日志
tail -f /data/software/minio/logs/minio.log

http://192.168.0.0:9002输入这个地址后会重定向到控制台登录地址 http://192.168.0.0:9001/login   

然后在登录界面输入用户名和密码即可登录

三、springboot和python

springboot中配置

minio:
  endpoint: http://serverip
  port: 9002
  bucketName: xxx-dev
  secure: false

python使用:

安装依赖

pip install minio
from minio import Minio
from minio.error import S3Error
 
# 设置MinIO服务器信息,endpoint不要带http/https
minio_endpoint = 'your_minio_endpoint'
minio_access_key = 'your_access_key'
minio_secret_key = 'your_secret_key'
minio_bucket = 'your_bucket_name'
 
# 创建MinIO客户端
minio_client = Minio(minio_endpoint,
                    access_key=minio_access_key,
                    secret_key=minio_secret_key,
                    secure=False)  # 如果使用https,请将secure设置为True
 
# 上传文件的本地路径和MinIO存储桶中的对象键
local_file_path = '/path/to/local/file.txt'
minio_object_key = 'uploaded/file.txt'
 
try:
    # 使用put_object方法将文件上传到MinIO
    minio_client.fput_object(minio_bucket, minio_object_key, local_file_path)
 
    print(f"File {local_file_path} uploaded to MinIO successfully.")
 
except S3Error as e:
    print(f"Error uploading file to MinIO: {e}")

上传图片

def upload_to_minio(image_data, object_name):
    """
    将图像数据上传到MinIO
    :param image_data: 图像的二进制数据
    :param object_name: 在MinIO中的对象名称
    """

    try:
        data = io.BytesIO(image_data)
        # 使用确切的数据长度
        length = len(image_data)
        minio_client.put_object(
            bucket_name,
            object_name,
            data=data,
            length=length,  # 提供确切的数据长度
            # -1,  # 使用-1作为长度参数表示流模式
            content_type="application/octet-stream"
        )
        # print(f"result: '{result}'")
        # 构造HTTP(S)路径
        http_path = f"![图片](http://{MINIO_ENDPOINT}/{bucket_name}/{object_name})"
        # print(f"✅ 图片 '{object_name}' 上传成功,可访问地址: {http_path}")
        return http_path  # 返回完整的URL
        # print(f"ETag: {result.etag}, Version ID: {result.version_id}")
    except S3Error as e:
        print(f"Error uploading file: {e}")

https://blog.youkuaiyun.com/Bruce1114/article/details/134555188

https://blog.youkuaiyun.com/u011174699/article/details/124903036

<think>嗯,用户想了解如何使用Python操作MinIO上传和删除文件。首先,我得确定用户对MinIO的了解程度。MinIO是一个高性能的对象存储服务,兼容Amazon S3 API,所以可能需要提到S3的兼容性。接下来,用户需要具体的操作步骤,比如安装SDK、连接MinIO服务器、上传和删除文件的方法。 我应该先介绍安装必要的库,Python操作MinIO通常使用minio库,或者boto3,但minio库更直接。然后,连接MinIO服务器需要端点、访问密钥和秘密密钥。这里要提醒用户替换成自己的信息,并注意安全性,不要硬编码在代码中。 上传文件的部分,可能需要分两种情况:上传文件和大文件(分片上传)。用户可能不知道put_object和fput_object的区别,需要解释清楚。比如,put_object用于数据流,而fput_object从文件路径上传。同时,要提到桶的存在,如果桶不存在需要先创建,或者设置自动创建。 删除文件的话,使用remove_object方法,参数是桶名和对象名。可能还需要处理异常,比如文件不存在的情况,但用户是否需要错误处理呢?可能先提供基本用法,再建议添加异常处理以提高健壮性。 另外,用户可能遇到的问题,比如连接错误,权限问题,或者桶不存在。应该在示例代码中加入try-except块来捕获异常,并给出提示。这样用户在实际操作时更容易调试。 还要注意代码示例的准确性,确保导入的模块正确,方法参数正确。比如Minio的客户端初始化是否正确,endpoint是否包含端口号,是否是HTTP还是HTTPS。这些细节可能导致连接失败。 最后,是否需要提醒用户关于安全性的问题,比如密钥的管理,使用环境变量或者配置文件,而不是直接写在代码里。这可能对用户的生产环境部署有帮助。 总结一下,步骤应该是:安装库→连接客户端→创建桶(如果需要)→上传文件→删除文件。每个步骤给出代码示例,并解释参数和注意事项。可能还需要给出一个完整的示例,演示整个流程,让用户能够直接复制并测试。</think>以下是如何使用Python操作MinIO进行文件上传和删除的详细步骤: --- ### 1. 安装依赖库 ```bash pip install minio ``` --- ### 2. 连接MinIO服务器 ```python from minio import Minio from minio.error import S3Error # 初始化客户端 client = Minio( endpoint="play.min.io:443", # MinIO服务器地址+端口 access_key="your-access-key", # 替换为你的Access Key secret_key="your-secret-key", # 替换为你的Secret Key secure=True # 是否使用HTTPS ) ``` --- ### 3. 上传文件 #### 3.1 上传文件 ```python try: # 上传文件到指定桶 client.fput_object( bucket_name="my-bucket", # 桶名称 object_name="my-file.txt", # 对象存储路径 file_path="local-file.txt", # 本地文件路径 content_type="text/plain" # 文件类型 ) print("文件上传成功") except S3Error as e: print(f"上传失败: {e}") ``` #### 3.2 流式上传(大文件) ```python with open("large-file.zip", "rb") as file_data: file_stat = os.stat("large-file.zip") client.put_object( bucket_name="my-bucket", object_name="uploads/large-file.zip", data=file_data, length=file_stat.st_size, content_type="application/zip" ) ``` --- ### 4. 删除文件 ```python try: client.remove_object( bucket_name="my-bucket", object_name="my-file.txt" ) print("文件删除成功") except S3Error as e: print(f"删除失败: {e}") ``` --- ### 5. 完整示例流程 ```python from minio import Minio import os client = Minio( "play.min.io:443", access_key="your-key", secret_key="your-secret", secure=True ) # 自动创建桶(如果不存在) bucket_name = "demo-bucket" if not client.bucket_exists(bucket_name): client.make_bucket(bucket_name) # 上传文件 client.fput_object(bucket_name, "test.txt", "local.txt") # 删除文件 client.remove_object(bucket_name, "test.txt") ``` --- ### 关键参数说明 1. **endpoint**:格式为`host:port` 2. **bucket**:相当于文件系统的文件夹(需先创建) 3. **object_name**:存储路径(支持目录格式如`folder/file.txt`) 4. **安全建议**:密钥应通过环境变量获取,不要硬编码 --- ### 常见错误处理 - 捕获`S3Error`异常获取详细错误信息 - 检查网络连接和权限配置 - 确认桶是否存在(可通过`bucket_exists()`检查) 建议结合[MinIO官方Python SDK文档](https://min.io/docs/minio/linux/developers/python/API.html)进行扩展开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex_81D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值