Minio

Lea4ning發表於2024-06-27

Minio

【一】介紹

MinIO 是一個開源物件儲存伺服器,相容 Amazon S3 雲端儲存服務。它設計用於儲存非結構化資料,如照片、影片、日誌檔案、備份和容器映象。MinIO 可以用於構建高效能的基礎設施,以支援機器學習、分析和應用資料工作負載。

MinIO 的主要特性包括:

  1. S3 相容性:MinIO 提供與 Amazon S3 API 高度相容的介面,便於與使用 S3 的現有應用整合。
  2. 高效能:MinIO 最佳化了高效能處理,能夠低延遲地處理大量資料。
  3. 可擴充套件性:MinIO 可以橫向擴充套件到多個節點,以滿足不斷增長的儲存需求。
  4. 安全性:MinIO 支援多種安全功能,包括加密、身份管理和訪問控制。
  5. 簡單部署:MinIO 易於部署,可以在任何硬體上執行,無論是本地部署、雲端還是邊緣裝置。

【二】安裝

【1】docker-compose.yml

version: '3'

services:
  minio:
    image: minio/minio  	## 基於minio官方映象
    container_name: minio   ## 容器名
    ports:		## 埠對映
      - "9000:9000"
      - "9090:9090"
    environment:   ## 設定環境變數
      - MINIO_ACCESS_KEY=lea4ning
      - MINIO_SECRET_KEY=12345678  # 密碼最少8位
    volumes:		## 檔案對映
      - ~/project/minio/data:/data
      - ~/project/minio/config:/root/.minio
    restart: always
    command: server /data --console-address ":9090" --address ":9000"

# --console-address ":9090"   # 後臺控制檯埠   # 後臺登入賬號密碼就是上面設定的access_key 和 secret_key
# --address ":9000"  # 上傳檔案埠

【2】啟動

# 建立資料夾
mkdir data
mkdir config
# 切換工作目錄到包含 docker-compose.yml 檔案下的資料夾
# 啟動
docker-compose up --build -d
# 訪問【伺服器ip:9090】 即可訪問控制檯

【三】使用

【1】python操作minio

python操作minio的API指南:https://min.io/docs/minio/linux/developers/python/API.html

【1.1】建立例項

pip install minio  ## 安裝模組
  • Minio(endpoint,access_key=None,secret_key=None, session_token=None,secure=True,region=None,http_client=None,credentials=None)

引數

引數 型別 描述
endpoint str S3 服務的主機名。
access_key str (可選)您在 S3 服務中賬戶的訪問金鑰(又名使用者 ID)。
secret_key str (可選)您在 S3 服務中的賬戶的私有金鑰(又名密碼)。
session_token str (可選)您在 S3 服務中的賬戶的會話令牌。
secure 布林 (可選)指示是否使用與 S3 服務的安全 (TLS) 連線的標誌。
region str (可選)S3 服務中儲存桶的區域名稱。
http_client urllib3.poolmanager.PoolManager (可選)自定義 HTTP 客戶端。
credentials minio.credentials.Provider (可選)您在 S3 服務中賬戶的憑證提供商。
cert_check 布林 (可選)用於檢查伺服器證書上是否存在 HTTPS 連線的標誌。

【1.2】桶操作

make_bucket(bucket_name, location='us-east-1', object_lock=False)

建立具有區域和物件鎖定的儲存桶。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
location str 將在其中建立儲存桶的區域。
object_lock 布林 標誌以設定物件鎖定功能。

## Create bucket.
client.make_bucket("my-bucket")

## Create bucket on specific region.
client.make_bucket("my-bucket", "us-west-1")

## Create bucket with object-lock feature on specific region.
client.make_bucket("my-bucket", "eu-west-2", object_lock=True)
list_buckets()

列出所有可訪問儲存桶的資訊。

引數

返回
儲存桶列表

buckets = client.list_buckets()
for bucket in buckets:
    print(bucket.name, bucket.creation_date)
bucket_exists(bucket_name)

檢查儲存桶是否存在。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

if client.bucket_exists("my-bucket"):
    print("my-bucket exists")
else:
    print("my-bucket does not exist")
remove_bucket(bucket_name)

移除空桶。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

client.remove_bucket("my-bucket")
list_objects(bucket_name, prefix=None, recursive=False, start_after=None, include_user_meta=False, include_version=False, use_api_v1=False, use_url_encoding_type=True)

列出儲存桶的物件資訊。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
prefix str 物件名稱以字首開頭。
recursive 布林 列表遞迴方式而不是目錄結構模擬。
start_after str 在此鍵名稱後面列出物件。
include_user_meta 布林 要控制以包含使用者後設資料的 MinIO 特定標誌。
include_version 布林 用於控制是否包含物件版本的標誌。
use_api_v1 布林 要控制是否使用 ListObjectV1 S3 API 的標誌。
use_url_encoding_type 布林 用於控制是否使用 URL 編碼型別的標誌。

返回值

返回
Object 的迭代器

## List objects information.
objects = client.list_objects("my-bucket")
for obj in objects:
    print(obj)

## List objects information whose names starts with "my/prefix/".
objects = client.list_objects("my-bucket", prefix="my/prefix/")
for obj in objects:
    print(obj)

## List objects information recursively.
objects = client.list_objects("my-bucket", recursive=True)
for obj in objects:
    print(obj)

## List objects information recursively whose names starts with
## "my/prefix/".
objects = client.list_objects(
    "my-bucket", prefix="my/prefix/", recursive=True,
)
for obj in objects:
    print(obj)

## List objects information recursively after object name
## "my/prefix/world/1".
objects = client.list_objects(
    "my-bucket", recursive=True, start_after="my/prefix/world/1",
)
for obj in objects:
    print(obj)
get_bucket_policy(bucket_name)

獲取儲存桶的儲存桶策略配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

返回值

引數
儲存桶策略配置為 JSON 字串。

policy = client.get_bucket_policy("my-bucket")
set_bucket_policy(bucket_name,政策)

將儲存桶策略配置設定為儲存桶。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
Policy str 儲存桶策略配置為 JSON 字串。

## Example anonymous read-only bucket policy.
policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": ["s3:GetBucketLocation", "s3:ListBucket"],
            "Resource": "arn:aws:s3:::my-bucket",
        },
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*",
        },
    ],
}
client.set_bucket_policy("my-bucket", json.dumps(policy))

## Example anonymous read-write bucket policy.
policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
            ],
            "Resource": "arn:aws:s3:::my-bucket",
        },
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
            ],
            "Resource": "arn:aws:s3:::my-bucket/images/*",
        },
    ],
}
client.set_bucket_policy("my-bucket", json.dumps(policy))
delete_bucket_policy(bucket_name)

刪除儲存桶的儲存桶策略配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

client.delete_bucket_policy("my-bucket")
get_bucket_notification(bucket_name)

獲取儲存桶的通知配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

返回值

引數
NotificationConfig 物件。

config = client.get_bucket_notification("my-bucket")
set_bucket_notification(bucket_name,配置)

設定儲存桶的通知配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
config 通知配置 通知配置。

config = NotificationConfig(
    queue_config_list=[
        QueueConfig(
            "QUEUE-ARN-OF-THIS-BUCKET",
            ["s3:ObjectCreated:*"],
            config_id="1",
            prefix_filter_rule=PrefixFilterRule("abc"),
        ),
    ],
)
client.set_bucket_notification("my-bucket", config)
delete_bucket_notification(bucket_name)

刪除儲存桶的通知配置。成功後,S3 服務將停止對儲存桶之前設定的事件的通知。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

client.delete_bucket_notification("my-bucket")
listen_bucket_notification(bucket_name, prefix='', suffix='', events=('s3:ObjectCreated:', 's3:ObjectRemoved:', 's3:ObjectAccessed:*'))

監聽儲存桶的物件字首和字尾事件。呼叫方應迭代返回的迭代器以讀取新事件。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
prefix str 物件的偵聽事件以字首開頭。
suffix str 物件的偵聽事件以字尾結尾。
events 列表 要收聽的事件。

返回值

引數
事件記錄的迭代器作為字典
with client.listen_bucket_notification(
    "my-bucket",
    prefix="my-prefix/",
    events=["s3:ObjectCreated:*", "s3:ObjectRemoved:*"],
) as events:
    for event in events:
        print(event)
get_bucket_encryption(bucket_name)

獲取儲存桶的加密配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

返回值

引數
SSEConfig 物件。

config = client.get_bucket_encryption("my-bucket")
set_bucket_encryption(bucket_name,配置)

設定儲存桶的加密配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
config 上交所 伺服器端加密配置。

client.set_bucket_encryption(
    "my-bucket", SSEConfig(Rule.new_sse_s3_rule()),
)
delete_bucket_encryption(bucket_name)

刪除儲存桶的加密配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

client.delete_bucket_encryption("my-bucket")
get_bucket_versioning(bucket_name)

獲取儲存桶的版本控制配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

config = client.get_bucket_versioning("my-bucket")
print(config.status)
set_bucket_versioning(bucket_name, 配置)

將版本控制配置設定為儲存桶。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
config 版本控制配置 版本控制配置。

client.set_bucket_versioning("my-bucket", VersioningConfig(ENABLED))
delete_bucket_replication(bucket_name)

刪除儲存桶的複製配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

client.delete_bucket_replication("my-bucket")
get_bucket_replication(bucket_name)

獲取儲存桶的複製配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
返回
ReplicationConfig 物件。

config = client.get_bucket_replication("my-bucket")
set_bucket_replication(bucket_name,配置)

將複製配置設定為儲存桶。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
config 複製配置 複製配置。

config = ReplicationConfig(
    "REPLACE-WITH-ACTUAL-ROLE",
    [
        Rule(
            Destination(
                "REPLACE-WITH-ACTUAL-DESTINATION-BUCKET-ARN",
            ),
            ENABLED,
            delete_marker_replication=DeleteMarkerReplication(
                DISABLED,
            ),
            rule_filter=Filter(
                AndOperator(
                    "TaxDocs",
                    {"key1": "value1", "key2": "value2"},
                ),
            ),
            rule_id="rule1",
            priority=1,
        ),
    ],
)
client.set_bucket_replication("my-bucket", config)
delete_bucket_lifecycle(bucket_name)

刪除儲存桶的生命週期配置。

Parameters

Param Type Description
bucket_name str Name of the bucket.

Example

client.delete_bucket_lifecycle("my-bucket")
get_bucket_lifecycle(bucket_name)

Get lifecycle configuration of a bucket.

Parameters

Param Type Description
bucket_name str Name of the bucket.
Return
LifecycleConfig object.

Example

config = client.get_bucket_lifecycle("my-bucket")
set_bucket_lifecycle(bucket_name, config)

Set lifecycle configuration to a bucket.

Parameters

Param Type Description
bucket_name str Name of the bucket.
config LifecycleConfig Lifecycle configuration.

config = LifecycleConfig(
    [
        Rule(
            ENABLED,
            rule_filter=Filter(prefix="documents/"),
            rule_id="rule1",
            transition=Transition(days=30, storage_class="GLACIER"),
        ),
        Rule(
            ENABLED,
            rule_filter=Filter(prefix="logs/"),
            rule_id="rule2",
            expiration=Expiration(days=365),
        ),
    ],
)
client.set_bucket_lifecycle("my-bucket", config)
delete_bucket_tags(bucket_name)

刪除儲存桶的標籤配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

client.delete_bucket_tags("my-bucket")
get_bucket_tags(bucket_name)

獲取儲存桶的標籤配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
返回
Tags 物件。

tags = client.get_bucket_tags("my-bucket")
set_bucket_tags(bucket_name,標籤)

將標籤配置設定為儲存桶。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
tags 標籤 標記配置。

tags = Tags.new_bucket_tags()
tags["Project"] = "Project One"
tags["User"] = "jsmith"
client.set_bucket_tags("my-bucket", tags)
delete_object_lock_config(bucket_name)

刪除儲存桶的物件鎖定配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。

client.delete_object_lock_config("my-bucket")
get_object_lock_config(bucket_name)

獲取儲存桶的物件鎖定配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
返回
ObjectLockConfig 物件。

config = client.get_object_lock_config("my-bucket")
set_object_lock_config(bucket_name,配置)

將物件鎖定配置設定為儲存桶。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
config 物件LockConfig 物件鎖定配置。

config = ObjectLockConfig(GOVERNANCE, 15, DAYS)
client.set_object_lock_config("my-bucket", config)

【1.3】物件操作

get_object(bucket_name, object_name, offset=0, length=0, request_headers=None, ssec=None, version_id=None, extra_query_params=None)

獲取從偏移量到物件長度的資料。返回的響應在使用後應關閉,以釋放網路資源。若要重用連線,需要顯式呼叫。response.release_conn()

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
offset 整數 物件資料的起始位元組位置。
length 整數 來自偏移量的物件資料的位元組數。
request_headers 字典 要隨 GET 請求新增的任何其他標頭。
ssec SseCustomerKey 伺服器端加密客戶金鑰。
version_id str 物件的版本 ID。
extra_query_params 字典 用於高階使用的額外查詢引數。

返回值

返回
urllib3.response.HTTPResponse 物件。

## Get data of an object.
try:
    response = client.get_object("my-bucket", "my-object")
    ## Read data from response.
finally:
    response.close()
    response.release_conn()

## Get data of an object of version-ID.
try:
    response = client.get_object(
        "my-bucket", "my-object",
        version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
    )
    ## Read data from response.
finally:
    response.close()
    response.release_conn()

## Get data of an object from offset and length.
try:
    response = client.get_object(
        "my-bucket", "my-object", offset=512, length=1024,
    )
    ## Read data from response.
finally:
    response.close()
    response.release_conn()

## Get data of an SSE-C encrypted object.
try:
    response = client.get_object(
        "my-bucket", "my-object",
        ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
    )
    ## Read data from response.
finally:
    response.close()
    response.release_conn()
select_object_content(bucket_name、object_name、請求)

按 SQL 表示式選擇物件的內容。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
request 選擇請求 選擇請求。

返回值

返回
讀取器以 SelectObjectReader 的形式包含請求的記錄和進度資訊

with client.select_object_content(
        "my-bucket",
        "my-object.csv",
        SelectRequest(
            "select * from S3Object",
            CSVInputSerialization(),
            CSVOutputSerialization(),
            request_progress=True,
        ),
) as result:
    for data in result.stream():
        print(data.decode())
    print(result.stats())
fget_object(bucket_name、object_name、file_path、request_headers=無、ssec=無、version_id=無、extra_query_params=無、tmp_file_path=無)

將物件的資料下載到檔案。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
file_path str 要下載的檔案的名稱。
request_headers 字典 要隨 GET 請求新增的任何其他標頭。
ssec SseCustomerKey 伺服器端加密客戶金鑰。
version_id str 物件的版本 ID。
extra_query_params 字典 用於高階使用的額外查詢引數。
tmp_file_path str 臨時檔案的路徑。

返回值

返回
物件資訊作為物件

## Download data of an object.
client.fget_object("my-bucket", "my-object", "my-filename")

## Download data of an object of version-ID.
client.fget_object(
    "my-bucket", "my-object", "my-filename",
    version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)

## Download data of an SSE-C encrypted object.
client.fget_object(
    "my-bucket", "my-object", "my-filename",
    ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)

透過伺服器端從另一個物件複製資料來建立物件。在此 API 中,支援的最大源物件大小為 5GiB。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
source 複製源 源物件資訊。
sse 上交所 目標物件的伺服器端加密。
metadata 字典 要與目標物件一起復制的任何使用者定義的後設資料。
tags 標籤 目標物件的標記。
retention 保留 保留配置。
legal_hold 布林 用於為目標物件設定合法保留的標誌。
metadata_directive str 用於處理目標物件的使用者後設資料的指令。
tagging_directive str 用於處理目標物件的標記的指令。

返回值

返回
ObjectWriteResult 物件。

from datetime import datetime, timezone
from minio.commonconfig import REPLACE, CopySource

## copy an object from a bucket to another.
result = client.copy_object(
    "my-bucket",
    "my-object",
    CopySource("my-sourcebucket", "my-sourceobject"),
)
print(result.object_name, result.version_id)

## copy an object with condition.
result = client.copy_object(
    "my-bucket",
    "my-object",
    CopySource(
        "my-sourcebucket",
        "my-sourceobject",
        modified_since=datetime(2014, 4, 1, tzinfo=timezone.utc),
    ),
)
print(result.object_name, result.version_id)

## copy an object from a bucket with replacing metadata.
metadata = {"test_meta_key": "test_meta_value"}
result = client.copy_object(
    "my-bucket",
    "my-object",
    CopySource("my-sourcebucket", "my-sourceobject"),
    metadata=metadata,
    metadata_directive=REPLACE,
)
print(result.object_name, result.version_id)
compose_object(bucket_name、object_name、sources、sse=None、metadata=None、tags=None、retention=None、legal_hold=False)

透過使用伺服器端複製合併來自不同源物件的資料來建立物件。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
sources 列表 ComposeSource 物件的列表。
sse 上交所 目標物件的伺服器端加密。
metadata 字典 要與目標物件一起復制的任何使用者定義的後設資料。
tags 標籤 目標物件的標記。
retention 保留 保留配置。
legal_hold 布林 用於為目標物件設定合法保留的標誌。

返回值

返回
ObjectWriteResult 物件。

from minio.commonconfig import ComposeSource
from minio.sse import SseS3

sources = [
    ComposeSource("my-job-bucket", "my-object-part-one"),
    ComposeSource("my-job-bucket", "my-object-part-two"),
    ComposeSource("my-job-bucket", "my-object-part-three"),
]

## Create my-bucket/my-object by combining source object
## list.
result = client.compose_object("my-bucket", "my-object", sources)
print(result.object_name, result.version_id)

## Create my-bucket/my-object with user metadata by combining
## source object list.
result = client.compose_object(
    "my-bucket",
    "my-object",
    sources,
    metadata={"test_meta_key": "test_meta_value"},
)
print(result.object_name, result.version_id)

## Create my-bucket/my-object with user metadata and
## server-side encryption by combining source object list.
client.compose_object("my-bucket", "my-object", sources, sse=SseS3())
print(result.object_name, result.version_id)

將資料從流上傳到儲存桶中的物件。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
data 物件 具有可呼叫的 read() 返回 bytes 物件的物件。
length 整數 資料大小;-1 表示未知大小,並設定有效part_size。
content_type str 物件的內容型別。
metadata 字典 與您的 PUT 請求一起上傳的任何其他後設資料。
sse 上交所 伺服器端加密。
progress 執行緒 進度物件。
part_size 整數 多部件零件尺寸。
tags 標籤 物件的標記。
retention 保留 保留配置。
legal_hold 布林 標誌為物件設定合法保留。

返回值

返回
ObjectWriteResult 物件。

## Upload data.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload unknown sized data.
data = urlopen(
    "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.81.tar.xz",
)
result = client.put_object(
    "my-bucket", "my-object", data, length=-1, part_size=10*1024*1024,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with content-type.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    content_type="application/csv",
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with metadata.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    metadata={"My-Project": "one"},
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with customer key type of server-side encryption.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    sse=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with KMS type of server-side encryption.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    sse=SseKMS("KMS-KEY-ID", {"Key1": "Value1", "Key2": "Value2"}),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with S3 type of server-side encryption.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    sse=SseS3(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with tags, retention and legal-hold.
date = datetime.utcnow().replace(
    hour=0, minute=0, second=0, microsecond=0,
) + timedelta(days=30)
tags = Tags(for_object=True)
tags["User"] = "jsmith"
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    tags=tags,
    retention=Retention(GOVERNANCE, date),
    legal_hold=True,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with progress bar.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    progress=Progress(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

將資料從檔案上傳到儲存桶中的物件。

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
file_path str 要上傳的檔案的名稱。
content_type str 物件的內容型別。
metadata 字典 與您的 PUT 請求一起上傳的任何其他後設資料。
sse 上交所 伺服器端加密。
progress 執行緒 進度物件。
part_size 整數 多部件零件尺寸。
tags 標籤 物件的標記。
retention 保留 保留配置。
legal_hold 布林 標誌為物件設定合法保留。

返回值

返回
ObjectWriteResult 物件。

## Upload data.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with content-type.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    content_type="application/csv",
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with metadata.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    metadata={"My-Project": "one"},
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with customer key type of server-side encryption.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    sse=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with KMS type of server-side encryption.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    sse=SseKMS("KMS-KEY-ID", {"Key1": "Value1", "Key2": "Value2"}),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with S3 type of server-side encryption.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    sse=SseS3(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with tags, retention and legal-hold.
date = datetime.utcnow().replace(
    hour=0, minute=0, second=0, microsecond=0,
) + timedelta(days=30)
tags = Tags(for_object=True)
tags["User"] = "jsmith"
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    tags=tags,
    retention=Retention(GOVERNANCE, date),
    legal_hold=True,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

## Upload data with progress bar.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    progress=Progress(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)
stat_object(bucket_name, object_name, ssec=無, version_id=無, extra_query_params=無)

獲取物件資訊和物件的後設資料。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
ssec SseCustomerKey 伺服器端加密客戶金鑰。
version_id str 物件的版本 ID。
extra_headers 字典 用於高階使用的額外 HTTP 標頭。
extra_query_params 字典 用於高階使用的額外查詢引數。

返回值

返回
物件資訊作為物件

## Get object information.
result = client.stat_object("my-bucket", "my-object")
print(
    "last-modified: {0}, size: {1}".format(
        result.last_modified, result.size,
    ),
)

## Get object information of version-ID.
result = client.stat_object(
    "my-bucket", "my-object",
    version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)
print(
    "last-modified: {0}, size: {1}".format(
        result.last_modified, result.size,
    ),
)

## Get SSE-C encrypted object information.
result = client.stat_object(
    "my-bucket", "my-object",
    ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print(
    "last-modified: {0}, size: {1}".format(
        result.last_modified, result.size,
    ),
)
remove_object(bucket_name, object_name, version_id=無)

刪除物件。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
version_id str 物件的版本 ID。

## Remove object.
client.remove_object("my-bucket", "my-object")

## Remove version of an object.
client.remove_object(
    "my-bucket", "my-object",
    version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)
remove_objects(bucket_name, delete_object_list, bypass_governance_mode=False)

刪除多個物件。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
delete_object_list 可迭代 包含 :class: 物件的可迭代物件。DeleteObject <DeleteObject>
bypass_governance_mode 布林 繞過治理保留模式。

返回值

返回
包含 :class: 物件的迭代器DeleteError <DeleteError>

## Remove list of objects.
errors = client.remove_objects(
    "my-bucket",
    [
        DeleteObject("my-object1"),
        DeleteObject("my-object2"),
        DeleteObject("my-object3", "13f88b18-8dcd-4c83-88f2-8631fdb6250c"),
    ],
)
for error in errors:
    print("error occurred when deleting object", error)

## Remove a prefix recursively.
delete_object_list = map(
    lambda x: DeleteObject(x.object_name),
    client.list_objects("my-bucket", "my/prefix/", recursive=True),
)
errors = client.remove_objects("my-bucket", delete_object_list)
for error in errors:
    print("error occurred when deleting object", error)
delete_object_tags(bucket_name, object_name, version_id=無)

刪除物件的標籤配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
version_id str 物件的版本 ID。

client.delete_object_tags("my-bucket", "my-object")
get_object_tags(bucket_name, object_name, version_id=無)

獲取物件的標籤配置。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
version_id str 物件的版本 ID。
返回
Tags 物件。

tags = client.get_object_tags("my-bucket", "my-object")
set_object_tags(bucket_name、object_name、標籤、version_id=無)

將標籤配置設定為物件。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
tags 標籤 標記配置。
version_id str 物件的版本 ID。

tags = Tags.new_object_tags()
tags["Project"] = "Project One"
tags["User"] = "jsmith"
client.set_object_tags("my-bucket", "my-object", tags)

啟用對物件的合法保留。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
version_id str 物件的版本 ID。

client.enable_object_legal_hold("my-bucket", "my-object")

禁用對物件的合法保留。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
version_id str 物件的版本 ID。

client.disable_object_legal_hold("my-bucket", "my-object")

如果在物件上啟用了合法保留,則返回 true。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
version_id str 物件的版本 ID。

if client.is_object_legal_hold_enabled("my-bucket", "my-object"):
    print("legal hold is enabled on my-object")
else:
    print("legal hold is not enabled on my-object")
get_object_retention(bucket_name, object_name, version_id=無)

獲取物件的保留資訊。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
version_id str 物件的版本 ID。

返回值

返回
保留物件

config = client.get_object_retention("my-bucket", "my-object")
set_object_retention(bucket_name, object_name, 配置, version_id=無)

將保留資訊設定為物件。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
config 保留 保留配置。
version_id str 物件的版本 ID。

config = Retention(GOVERNANCE, datetime.utcnow() + timedelta(days=10))
client.set_object_retention("my-bucket", "my-object", config)
presigned_get_object(bucket_name, object_name, expires=timedelta(days=7), response_headers=None, request_date=None, version_id=None, extra_query_params=None)

獲取物件的預簽名 URL,以下載其資料,其中包含到期時間和自定義請求引數。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
expires 日期時間.timedelta 在幾秒鐘內過期;預設值為 7 天。
response_headers 字典 可選的 response_headers 引數,用於指定響應欄位,如日期、大小、檔案型別、有關伺服器的資料等。
request_date 日期時間.datetime 用於指定其他請求日期的可選 request_date 引數。預設值為當前日期。
version_id str 物件的版本 ID。
extra_query_params 字典 用於高階使用的額外查詢引數。

返回值

返回
URL 字串

## Get presigned URL string to download 'my-object' in
## 'my-bucket' with default expiry (i.e. 7 days).
url = client.presigned_get_object("my-bucket", "my-object")
print(url)

## Get presigned URL string to download 'my-object' in
## 'my-bucket' with two hours expiry.
url = client.presigned_get_object(
    "my-bucket", "my-object", expires=timedelta(hours=2),
)
print(url)
presigned_put_object(bucket_name, object_name, expires=timedelta(days=7))

獲取物件的預簽名 URL,以上傳具有到期時間和自定義請求引數的資料。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
expires 日期時間.timedelta 在幾秒鐘內過期;預設值為 7 天。

返回值

返回
URL 字串

## Get presigned URL string to upload data to 'my-object' in
## 'my-bucket' with default expiry (i.e. 7 days).
url = client.presigned_put_object("my-bucket", "my-object")
print(url)

## Get presigned URL string to upload data to 'my-object' in
## 'my-bucket' with two hours expiry.
url = client.presigned_put_object(
    "my-bucket", "my-object", expires=timedelta(hours=2),
)
print(url)
presigned_post_policy(政策)

獲取物件的 PostPolicy 的表單資料,使用 POST 方法上傳其資料。

引數

引數 型別 描述
policy 郵政政策 釋出策略。

返回值

返回
包含字典的表單資料

policy = PostPolicy(
    "my-bucket", datetime.utcnow() + timedelta(days=10),
)
policy.add_starts_with_condition("key", "my/object/prefix/")
policy.add_content_length_range_condition(
    1*1024*1024, 10*1024*1024,
)
form_data = client.presigned_post_policy(policy)
get_presigned_url(方法、bucket_name、object_name、expires=timedelta(days=7)、response_headers=None、request_date=None、version_id=None、extra_query_params=None)

獲取物件的預簽名 URL,用於 HTTP 方法、到期時間和自定義請求引數。

引數

引數 型別 描述
method str HTTP 方法。
bucket_name str 儲存桶的名稱。
object_name str 儲存桶中的物件名稱。
expires 日期時間.timedelta 在幾秒鐘內過期;預設值為 7 天。
response_headers 字典 可選的 response_headers 引數,用於指定響應欄位,如日期、大小、檔案型別、有關伺服器的資料等。
request_date 日期時間.datetime 用於指定其他請求日期的可選 request_date 引數。預設值為當前日期。
version_id str 物件的版本 ID。
extra_query_params 字典 用於高階使用的額外查詢引數。

返回值

返回
URL 字串

## Get presigned URL string to delete 'my-object' in
## 'my-bucket' with one day expiry.
url = client.get_presigned_url(
    "DELETE",
    "my-bucket",
    "my-object",
    expires=timedelta(days=1),
)
print(url)

## Get presigned URL string to upload 'my-object' in
## 'my-bucket' with response-content-type as application/json
## and one day expiry.
url = client.get_presigned_url(
    "PUT",
    "my-bucket",
    "my-object",
    expires=timedelta(days=1),
    response_headers={"response-content-type": "application/json"},
)
print(url)

## Get presigned URL string to download 'my-object' in
## 'my-bucket' with two hours expiry.
url = client.get_presigned_url(
    "GET",
    "my-bucket",
    "my-object",
    expires=timedelta(hours=2),
)
print(url)
upload_snowball_objects(bucket_name、object_list、後設資料=無、sse=無、標記=無、保留=無、legal_hold=假、staging_filename=無、壓縮=假)

在一次 put 呼叫中上傳多個物件。它是透過建立中間 TAR 檔案來完成的,該檔案可以選擇壓縮並上傳到 S3 服務。

引數

引數 型別 描述
bucket_name str 儲存桶的名稱。
object_list 可迭代 包含 :class: 物件的可迭代物件。SnowballObject <SnowballObject>
metadata 字典 與您的 PUT 請求一起上傳的任何其他後設資料。
sse 上交所 伺服器端加密。
tags 標籤 物件的標記。
retention 保留 保留配置。
legal_hold 布林 標誌為物件設定合法保留。
staging_filename str 用於建立中間壓縮包的暫存檔名。
compression 布林 用於壓縮壓縮包的標誌。

返回值

返回
ObjectWriteResult 物件。

## Upload snowball object.
client.upload_snowball_objects(
    "my-bucket",
    [
        SnowballObject("my-object1", filename="/etc/hostname"),
        SnowballObject(
            "my-object2", data=io.BytesIO("hello"), length=5,
        ),
        SnowballObject(
            "my-object3", data=io.BytesIO("world"), length=5,
            mod_time=datetime.now(),
        ),
    ],
)

【1.3】案例

from minio import Minio
from minio.error import S3Error


def main():
    # Create a client with the MinIO server playground, its access key
    # and secret key.
    client = Minio("ip:9000",
                   access_key="lea4ning",
                   secret_key="12345678",
                   secure=False
                   )  # secure 如果為True使用https,false使用http
    # The file to upload, change this path if needed
    source_file = "./1.txt"

    # The destination bucket and filename on the MinIO server
    bucket_name = "resource"
    destination_file = "1.txt"

    # Make the bucket if it doesn't exist.
    found = client.bucket_exists(bucket_name)
    if not found:
        client.make_bucket(bucket_name)
        print("Created bucket", bucket_name)
    else:
        print("Bucket", bucket_name, "already exists")

    # Upload the file, renaming it in the process
    client.fput_object(
        bucket_name, destination_file, source_file,
    )
    print(
        source_file, "successfully uploaded as object",
        destination_file, "to bucket", bucket_name,
    )


if __name__ == "__main__":
    try:
        main()
    except S3Error as exc:
        print("error occurred.", exc)

image-20240627171223081

相關文章