# 七牛云 OSS 上传

将本地文件上传到七牛云 CDN 存储。

## 使用方式

用户会提供：
1. **file_path**：要上传的本地文件路径（支持单个文件或目录）
2. **prefix**：OSS 存储路径前缀（可选，默认 `self-media/`）

## 执行步骤

1. 激活项目虚拟环境：`source .venv/bin/activate`
2. 使用七牛 Python SDK 上传文件
3. 返回 CDN 访问链接

## 单文件上传

```bash
source .venv/bin/activate && python -c "
from qiniu import Auth, put_file
import os

AK = 't1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0'
SK = 'KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC'
BUCKET = 'union-saas'
CDN = 'https://cdn.union.jxyunge.com'

local_path = '本地文件路径'
key = 'self-media/远程存储路径'

q = Auth(AK, SK)
token = q.upload_token(BUCKET, key, 3600)
ret, info = put_file(token, key, local_path, version='v2')

if info.status_code == 200:
    print(f'上传成功: {CDN}/{key}')
else:
    print(f'上传失败: {info}')
"
```

## 批量上传目录

```bash
source .venv/bin/activate && python scripts/upload_qiniu.py
```

脚本 `scripts/upload_qiniu.py` 会上传 `articles/001/images/` 下所有 PNG 文件。

## 自定义批量上传

```bash
source .venv/bin/activate && python -c "
from qiniu import Auth, put_file
import os, glob

AK = 't1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0'
SK = 'KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC'
BUCKET = 'union-saas'
CDN = 'https://cdn.union.jxyunge.com'

local_dir = '本地目录路径'
prefix = 'self-media/自定义前缀/'

q = Auth(AK, SK)
for f in sorted(glob.glob(os.path.join(local_dir, '*'))):
    name = os.path.basename(f)
    key = prefix + name
    token = q.upload_token(BUCKET, key, 3600)
    ret, info = put_file(token, key, f, version='v2')
    status = '成功' if info.status_code == 200 else '失败'
    print(f'[{status}] {name} -> {CDN}/{key}')
"
```

## 在 Markdown 中替换图片链接

上传后，将文章中的本地图片路径替换为 CDN 链接：
- 本地路径格式：`![alt](本地路径/xxx.png)`
- CDN 链接格式：`![alt](https://cdn.union.jxyunge.com/self-media/xxx.png)`

## 七牛凭证

| 配置项 | 值 |
|--------|------|
| 上传地址 | `https://up-z0.qiniup.com` |
| AK | `t1PIPGcvBY9lJVXFZFb48maTQsGGhvLsR5QQlNq0` |
| SK | `KGooFdF5eCLdCIMCOD6x5ofMzu4vYE17T5Mvp9qC` |
| CDN 域名 | `https://cdn.union.jxyunge.com` |
| 空间名 | `union-saas` |

## 注意事项

- 虚拟环境 `.venv/` 已安装 `qiniu` SDK
- 上传同名文件会覆盖
- CDN 链接格式：`https://cdn.union.jxyunge.com/{key}`

$ARGUMENTS
