Minio
【一】介紹
MinIO 是一個開源物件儲存伺服器,相容 Amazon S3 雲端儲存服務。它設計用於儲存非結構化資料,如照片、影片、日誌檔案、備份和容器映象。MinIO 可以用於構建高效能的基礎設施,以支援機器學習、分析和應用資料工作負載。
MinIO 的主要特性包括:
- S3 相容性:MinIO 提供與 Amazon S3 API 高度相容的介面,便於與使用 S3 的現有應用整合。
- 高效能:MinIO 最佳化了高效能處理,能夠低延遲地處理大量資料。
- 可擴充套件性:MinIO 可以橫向擴充套件到多個節點,以滿足不斷增長的儲存需求。
- 安全性:MinIO 支援多種安全功能,包括加密、身份管理和訪問控制。
- 簡單部署: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"),
)
copy_object(bucket_name, object_name, source, sse=None, metadata=None, tags=None, retention=None, legal_hold=False, metadata_directive=None, tagging_directive=None)
透過伺服器端從另一個物件複製資料來建立物件。在此 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)
put_object(bucket_name, object_name, data, length, content_type=“application/octet-stream”, metadata=None, sse=None, progress=None, part_size=0, num_parallel_uploads=3, tags=None, retention=None, legal_hold=False)
將資料從流上傳到儲存桶中的物件。
引數
引數 | 型別 | 描述 |
---|---|---|
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,
),
)
fput_object(bucket_name, object_name, file_path, content_type=“application/octet-stream”, metadata=None, sse=None, progress=None, part_size=0, num_parallel_uploads=3, tags=None, retention=None, legal_hold=False)
將資料從檔案上傳到儲存桶中的物件。
引數 | 型別 | 描述 |
---|---|---|
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)
enable_object_legal_hold(bucket_name, object_name, version_id=無)
啟用對物件的合法保留。
引數
引數 | 型別 | 描述 |
---|---|---|
bucket_name |
str | 儲存桶的名稱。 |
object_name |
str | 儲存桶中的物件名稱。 |
version_id |
str | 物件的版本 ID。 |
例
client.enable_object_legal_hold("my-bucket", "my-object")
disable_object_legal_hold(bucket_name, object_name, version_id=無)
禁用對物件的合法保留。
引數
引數 | 型別 | 描述 |
---|---|---|
bucket_name |
str | 儲存桶的名稱。 |
object_name |
str | 儲存桶中的物件名稱。 |
version_id |
str | 物件的版本 ID。 |
例
client.disable_object_legal_hold("my-bucket", "my-object")
is_object_legal_hold_enabled(bucket_name, object_name, version_id=無)
如果在物件上啟用了合法保留,則返回 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)