完成任务16:编写 04_长期发展/环境保护.md
This commit is contained in:
78
skills/minio-list-urls/scripts/list_public_urls.py
Normal file
78
skills/minio-list-urls/scripts/list_public_urls.py
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
列出 MinIO 存储桶中所有对象的公网访问地址
|
||||
|
||||
环境变量:
|
||||
MINIO_ENDPOINT: MinIO 服务地址 (例如: http://192.168.1.1:9000)
|
||||
MINIO_ACCESS_KEY: 访问密钥
|
||||
MINIO_SECRET_KEY: 密钥
|
||||
MINIO_PUBLIC_URL: 公网访问域名 (例如: https://oss.example.com)
|
||||
"""
|
||||
|
||||
import os
|
||||
from urllib.parse import urlparse, quote
|
||||
|
||||
def main():
|
||||
# 获取环境变量
|
||||
endpoint = os.environ.get('MINIO_ENDPOINT', '')
|
||||
access_key = os.environ.get('MINIO_ACCESS_KEY', '')
|
||||
secret_key = os.environ.get('MINIO_SECRET_KEY', '')
|
||||
public_url = os.environ.get('MINIO_PUBLIC_URL', '').rstrip('/')
|
||||
|
||||
# 检查环境变量是否配置
|
||||
if not all([endpoint, access_key, secret_key, public_url]):
|
||||
print("错误: 请确保以下环境变量已配置:")
|
||||
print(" - MINIO_ENDPOINT")
|
||||
print(" - MINIO_ACCESS_KEY")
|
||||
print(" - MINIO_SECRET_KEY")
|
||||
print(" - MINIO_PUBLIC_URL")
|
||||
return
|
||||
|
||||
# 导入 minio 库
|
||||
try:
|
||||
from minio import Minio
|
||||
except ImportError:
|
||||
print("错误: 未安装 minio 库,正在安装...")
|
||||
os.system("pip install minio -q")
|
||||
from minio import Minio
|
||||
|
||||
# 解析 endpoint
|
||||
parsed = urlparse(endpoint)
|
||||
host = parsed.netloc
|
||||
secure = parsed.scheme == 'https'
|
||||
|
||||
# 创建客户端
|
||||
client = Minio(
|
||||
host,
|
||||
access_key=access_key,
|
||||
secret_key=secret_key,
|
||||
secure=secure
|
||||
)
|
||||
|
||||
# 列出所有桶
|
||||
buckets = client.list_buckets()
|
||||
|
||||
print(f"公共访问地址前缀: {public_url}")
|
||||
print(f"\n共 {len(buckets)} 个桶:\n")
|
||||
|
||||
total_objects = 0
|
||||
|
||||
for bucket in buckets:
|
||||
objects = list(client.list_objects(bucket.name))
|
||||
total_objects += len(objects)
|
||||
|
||||
if objects:
|
||||
print(f"【{bucket.name}】({len(objects)} 个对象):")
|
||||
for obj in objects:
|
||||
# URL 编码对象名,处理中文和特殊字符
|
||||
encoded_name = quote(obj.object_name, safe='')
|
||||
url = f"{public_url}/{bucket.name}/{encoded_name}"
|
||||
print(f" {obj.object_name}")
|
||||
print(f" -> {url}")
|
||||
print()
|
||||
|
||||
print(f"统计: 共 {len(buckets)} 个桶,{total_objects} 个对象")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user