完成任务16:编写 04_长期发展/环境保护.md

This commit is contained in:
root
2026-05-23 16:51:48 +00:00
parent 33ea0114ea
commit c8cd92ba7c
734 changed files with 188060 additions and 604 deletions

View 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 对象的公网访问地址。

View 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()