完成任务16:编写 04_长期发展/环境保护.md
This commit is contained in:
68
skills/minio-list-urls/SKILL.md
Normal file
68
skills/minio-list-urls/SKILL.md
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
name: minio-list-urls
|
||||
description: 列出 MinIO 存储桶中所有对象的公网访问地址。当用户要求"列出公网地址"、"获取文件外链"、"查看所有文件的访问链接"时使用。
|
||||
vm0_secrets:
|
||||
- MINIO_ACCESS_KEY
|
||||
- MINIO_SECRET_KEY
|
||||
vm0_vars:
|
||||
- MINIO_ENDPOINT
|
||||
- MINIO_PUBLIC_URL
|
||||
---
|
||||
|
||||
# MinIO 公网地址列表
|
||||
|
||||
## 概述
|
||||
|
||||
快速列出 MinIO 存储桶中所有对象的公网访问地址。适用于需要批量获取文件外链、分享文件、或查看所有可访问资源的场景。
|
||||
|
||||
## 使用场景
|
||||
|
||||
- 用户要求列出 MinIO 里所有文件的公网访问地址
|
||||
- 用户需要获取文件的分享链接
|
||||
- 用户要求查看桶内对象的 URL
|
||||
- 用户提到"公网地址"、"外链"、"访问链接"等关键词
|
||||
|
||||
## 环境变量要求
|
||||
|
||||
使用本技能前,请确保已配置以下环境变量:
|
||||
|
||||
| 变量名 | 说明 | 示例 |
|
||||
|--------|------|------|
|
||||
| `MINIO_ENDPOINT` | MinIO 服务地址(内网) | `http://192.168.1.1:9000` |
|
||||
| `MINIO_ACCESS_KEY` | 访问密钥 | `minioadmin` |
|
||||
| `MINIO_SECRET_KEY` | 密钥 | `minioadmin` |
|
||||
| `MINIO_PUBLIC_URL` | 公网访问域名 | `https://oss.example.com` |
|
||||
|
||||
## 使用方法
|
||||
|
||||
直接运行脚本即可列出所有对象的公网地址:
|
||||
|
||||
```bash
|
||||
python3 /app/working/workspaces/default/active_skills/minio-list-urls/scripts/list_public_urls.py
|
||||
```
|
||||
|
||||
## 输出格式
|
||||
|
||||
脚本会输出每个对象的文件名和对应的公网访问地址:
|
||||
|
||||
```
|
||||
公共访问地址前缀: https://oss.example.com
|
||||
桶名称: files
|
||||
|
||||
共 14 个对象的公网访问地址:
|
||||
|
||||
文件名.jpg
|
||||
-> https://oss.example.com/files/%E6%96%87%E4%BB%B6%E5%90%8D.jpg
|
||||
```
|
||||
|
||||
## 技术细节
|
||||
|
||||
- 文件名中的中文和特殊字符会自动进行 URL 编码
|
||||
- 支持所有配置为公共读的存储桶
|
||||
- 遍历所有桶并列出所有对象
|
||||
|
||||
## 脚本
|
||||
|
||||
### scripts/list_public_urls.py
|
||||
|
||||
列出所有 MinIO 对象的公网访问地址。
|
||||
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