软件列表
| ID | 名称 | Slug | 平台 | 版本数 | 创建时间 | 操作 |
|---|
版本管理
| ID | 版本 | 渠道 | 大小 | SHA256 | 状态 | 下载次数 | 创建时间 | 操作 |
|---|
存储配置
| 名称 | 类型 | Endpoint / 路径 | Bucket | 文件夹 | 状态 | 操作 |
|---|
提示:可配置多个存储后端,通过"启用"切换当前使用的存储。切换后新上传的文件存到新存储,已有文件不会自动迁移。
客户端接入说明
1. 检查更新
GET /api/update/{slug}/check?current_version=1.0.0&channel=stable
响应示例:
{
"software": "my-app",
"current_version": "1.0.0",
"has_update": true,
"latest_version": "1.1.0",
"download_url": "/api/download/my-app/1.1.0",
"checksum": "sha256:abc123...",
"file_size": 24567890,
"release_notes": "## 1.1.0\n- 修复 XX"
}
2. 下载更新包
GET /api/download/{slug}/{version}
支持 HTTP Range(断点续传)。下载完成后请校验 SHA256。
3. Python 客户端示例
import requests, hashlib
resp = requests.get(f"{SERVER}/api/update/my-app/check",
params={"current_version": "1.0.0", "channel": "stable"})
data = resp.json()
if data["has_update"]:
r = requests.get(f"{SERVER}{data['download_url']}", stream=True)
algo, expected = data["checksum"].split(":", 1)
h = hashlib.sha256()
with open("update.zip", "wb") as f:
for chunk in r.iter_content(8192):
f.write(chunk)
h.update(chunk)
if h.hexdigest() != expected:
raise RuntimeError("校验失败")
4. Electron 客户端示例
// 主进程
const { autoUpdater } = require('electron-updater');
// 或自定义检查:
fetch(`${SERVER}/api/update/my-app/check?current_version=${APP_VERSION}`)
.then(r => r.json())
.then(data => {
if (data.has_update) {
// 下载 data.download_url,校验 checksum,调用 shell 或 IPC 触发更新
}
});