跳到主要内容

MinIO存储

MinIO存储是开源的私有云对象存储服务,基于S3兼容API实现海量非结构化数据的高性能存储管理。它负责文件上传、下载、删除和签名URL生成,支持分布式部署和数据分片,适合需要数据本地化管理的企业私有云环境。

MinIO存储元素分层结构为Meta(storages.Meta) → Type(storages.MinioType) → 实例,开发者可通过JitAi的可视化开发工具快捷地创建MinIO存储实例元素。

当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的storages.MinioType元素,以实现自己的封装。

快速开始

创建实例元素

目录结构

推荐目录结构
storages/
└── MyMinioStorage/ # 存储元素名称(可自定义)
├── e.json # 元素配置文件
└── MyMinioStorage.json # 业务配置文件(与目录名同名)

e.json文件

e.json配置示例
{
"title": "我的MinIO存储",
"type": "storages.MinioType",
"backendBundleEntry": ".",
"variables": []
}

业务配置文件

MyMinioStorage.json配置示例
{
"accessKeyId": "your-access-key",
"accessKeySecret": "your-secret-key",
"scheme": "https",
"endPoint": "minio.example.com:9000",
"bucketName": "my-bucket"
}

调用示例

基本使用示例
# 获取MinIO存储实例
storage = app.getElement("storages.MyMinioStorage")

# 上传文件
with open("test.txt", "rb") as file:
result = storage.uploadByFile("test.txt", file.read(), "text/plain")
print(f"上传成功,URL: {result['url']}")

# 下载文件
file_data = storage.download("test.txt")

# 删除文件
storage.delete("test.txt")

元素配置

e.json配置

属性名类型必填说明
titlestring存储元素显示名称
typestring固定值:storages.MinioType
backendBundleEntrystring固定值:"."
variablesarray扩展变量配置,通常为空数组

业务配置文件配置

参数名类型必填说明
accessKeyIdstringMinIO访问密钥ID
accessKeySecretstringMinIO访问密钥Secret
endPointstringMinIO服务器地址和端口
bucketNamestring存储桶名称
schemestring协议类型,默认"http",可选"https"

方法

uploadByFile

上传文件到MinIO存储。

参数详解

参数名类型对应原生类型必填说明
nameStextstr文件名称
data-bytes文件二进制数据
contentTypeStextstr文件MIME类型,默认"application/octet-stream"

返回值

返回包含上传结果的字典,格式:{"url": "文件访问URL"}

使用示例

文件上传示例
storage = app.getElement("storages.MyMinioStorage")

# 上传文本文件
with open("document.txt", "rb") as file:
result = storage.uploadByFile(
name="document.txt",
data=file.read(),
contentType="text/plain"
)
print(f"文件URL: {result['url']}")

# 上传图片文件
with open("image.jpg", "rb") as file:
result = storage.uploadByFile(
name="image.jpg",
data=file.read(),
contentType="image/jpeg"
)

download

从MinIO存储下载文件。

参数详解

参数名类型对应原生类型必填说明
nameStextstr要下载的文件名称

返回值

返回文件的二进制数据

使用示例

文件下载示例
storage = app.getElement("storages.MyMinioStorage")

# 下载文件
file_data = storage.download("document.txt")

# 保存到本地
with open("downloaded_document.txt", "wb") as file:
file.write(file_data)

delete

删除MinIO存储中的文件。

参数详解

参数名类型对应原生类型必填说明
nameStextstr要删除的文件名称

返回值

删除操作的结果信息

使用示例

文件删除示例
storage = app.getElement("storages.MyMinioStorage")

# 删除文件
result = storage.delete("document.txt")
print("文件删除成功")

getSignUrl

生成文件的预签名上传URL。

参数详解

参数名类型对应原生类型必填说明
fileStextstr文件名称
contentTypeStextstr文件MIME类型
expiresNumericint签名过期时间(秒),默认300秒

返回值

返回包含预签名URL和内容类型的字典

使用示例

预签名URL生成示例
storage = app.getElement("storages.MyMinioStorage")

# 生成预签名URL
sign_result = storage.getSignUrl(
file="upload.pdf",
contentType="application/pdf",
expires=600 # 10分钟过期
)
print(f"预签名URL: {sign_result['url']}")

getObject

获取MinIO存储中的文件对象。

参数详解

参数名类型对应原生类型必填说明
nameStextstr文件名称

返回值

返回文件对象

使用示例

获取文件对象示例
storage = app.getElement("storages.MyMinioStorage")

# 获取文件对象
file_obj = storage.getObject("document.txt")

属性

config

存储配置信息,包含accessKeyId、accessKeySecret、endPoint、bucketName、scheme等配置参数。

name

存储实例的fullName标识。

client

MinIO客户端实例,用于与MinIO服务器通信。

SIGN_EXPIRES

默认签名过期时间,值为300秒。

高级特性

环境变量支持

MinIO存储支持在配置文件中使用环境变量,实现不同环境的配置隔离:

环境变量配置示例
{
"accessKeyId": "${MINIO_ACCESS_KEY}",
"accessKeySecret": "${MINIO_SECRET_KEY}",
"scheme": "${MINIO_SCHEME:-https}",
"endPoint": "${MINIO_ENDPOINT}",
"bucketName": "${MINIO_BUCKET}"
}

异常处理

MinIO存储提供专门的异常处理机制,自动处理HTTP错误和存储操作异常:

异常处理示例
storage = app.getElement("storages.MyMinioStorage")

try:
result = storage.uploadByFile("test.txt", data, "text/plain")
except Exception as e:
# 自动处理404文件不存在、网络错误等异常
print(f"存储操作失败: {e}")

批量文件操作

批量操作示例
storage = app.getElement("storages.MyMinioStorage")

# 批量上传文件
files = ["file1.txt", "file2.txt", "file3.txt"]
for filename in files:
with open(filename, "rb") as file:
storage.uploadByFile(filename, file.read(), "text/plain")

# 批量删除文件
for filename in files:
storage.delete(filename)