BT种子附件解析内容管理
详情介绍
BT种子解析插件(torrent)使用文档
版本:1.0.0 | 作者:kuakeba.cn | 适用于 Zsens Admin 3.0+(PHP 8.2+)
一、插件简介
为社区帖子提供 BT 种子(.torrent)附件能力:
- 发帖页上传
.torrent文件,服务端自动解析种子 - 自动计算 info_hash(SHA1),生成磁力链接(含 Tracker)
- 查询种子健康度:做种数 / 下载数,展示等级徽章,支持手动刷新
- 帖子正文输出文件目录,支持树形目录与普通列表两种视图切换
- 支持单帖挂载多个种子、目录折叠、磁力链接一键复制、种子文件下载
二、环境要求
| 项目 | 要求 |
|---|---|
| Zsens Admin | 3.0+ |
| PHP | 8.2+ |
| 社区插件(community) | 必须安装(发帖、帖子正文、版块权限的宿主) |
| cURL 扩展 | 推荐开启;未开启时健康度查询退化为顺序请求,速度较慢 |
| 目录写入权限 | public/storage/torrents/ 需可写(安装后首次上传自动创建) |
三、安装步骤
- 将
torrent目录整体放入项目plugins/下 - 进入后台 应用中心,找到「BT种子解析」,点击 安装
- 安装时自动:
- 创建数据表 {前缀}topic_torrent
- 将 plugins/torrent/static/ 复制到 public/static/torrent/
- 进入 应用中心 → BT种子解析 → 配置,按需调整配置项
- 确保已安装并启用 社区(community) 插件
插件通过前台渲染钩子自动挂载,无需修改主题模板;发帖页的「BT种子」拓展面板也会自动注册。
四、配置项说明
后台 应用中心 → BT种子解析 → 配置:
| 配置项 | 键名 | 默认值 | 说明 |
|---|---|---|---|
| 启用BT种子解析 | enabled | 开启 | 总开关。关闭后发帖页不展示种子拓展,帖内也不渲染种子区块 |
| 可发布用户组 | publishlevelids | 空 | 仅勾选的用户组可上传种子;不勾选表示全部用户组不可用;后台管理员不受限 |
| 可用版块 | category_ids | 空 | 仅勾选的版块发帖时可使用种子拓展;不勾选表示全部版块不可用 |
| 允许后缀 | allow_ext | torrent | 英文逗号分隔,不区分大小写 |
| 单文件大小(MB) | maxsizemb | 5 | 单个种子文件上限,范围 0.1–1024 |
| 单帖种子数量 | max_files | 3 | 每个主题最多挂载的种子数 |
| 显示磁力链接 | show_magnet | 开启 | 帖内展示完整磁力链接与复制/磁力下载按钮 |
| 显示信息哈希 | showinfohash | 开启 | 帖内展示 info_hash(大写 SHA1)并支持复制 |
| 种子健康度查询 | health_enabled | 开启 | 关闭后帖内不显示健康度,也不提供刷新接口 |
| 健康度缓存(分钟) | healthcacheminutes | 30 | 缓存期内直接复用查询结果;0 表示不缓存 |
| 健康度查询超时(秒) | health_timeout | 3 | 单个 Tracker 请求超时,范围 1–10 |
| 文件目录默认视图 | list_mode | 树形目录 | 可选「树形目录」或「普通列表」 |
| 默认展开文件目录 | list_expand | 开启 | 关闭后文件目录默认折叠,用户点击「展开全部文件」后展开 |
五、发帖使用
- 进入允许的版块发帖,在编辑器下方找到 「BT种子」 拓展面板
- 点击 选择种子文件,可一次选择多个
.torrent(受「单帖种子数量」限制) - 上传成功后自动展示解析结果:种子标题、内容大小、文件数、info_hash、磁力链接
- 可在列表中删除不需要的种子
- 正常发布帖子,种子信息随帖子保存
注意事项:
- 前端会先校验后缀、单文件大小与数量;服务端会再次校验
- 保存时服务端会优先重新解析本地种子文件,前端数据仅作兜底,避免伪造 info_hash / 磁力链接
- 上传期间请勿提交表单,避免种子数据未同步
- 后台管理员在后台编辑帖子时同样可以管理种子
六、前台展示
帖子正文下方自动渲染「种子资源」区块,每个种子包含:
| 区域 | 说明 |
|---|---|
| 标题栏 | 种子内标题、种子文件大小、内容总大小、文件数量 |
| 操作按钮 | 磁力下载(magnet: 链接)、下载种子(.torrent 文件) |
| 磁力链接 | 完整磁力链接,支持「复制」,过长时支持展开/收起 |
| 信息哈希 | info_hash 展示与一键复制(受配置开关控制) |
| 种子健康度 | 等级徽章 + 做种数/下载数,支持手动刷新(受配置开关控制) |
| 文件列表 | 树形目录 / 普通列表切换;目录可点击折叠;文件过多时可「展开全部文件」 |
健康度等级规则:
| 等级 | 条件 |
|---|---|
| 优秀 | 做种数 ≥ 10 |
| 良好 | 做种数 ≥ 3 |
| 一般 | 做种数 ≥ 1 |
| 无做种 | 做种数为 0 |
| 未知 | 无可用 HTTP(S) Tracker,或 Tracker 均查询失败 |
七、接口说明
1. 上传并解析种子
POST /torrent/upload
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
file | file | 是 | .torrent 种子文件 |
category_id | int | 否 | 当前版块 ID,用于版块权限校验 |
成功返回示例:
{
"code": 1,
"msg": "解析成功",
"data": {
"name": "示例种子.torrent",
"path": "torrents/20261017/xxxx.torrent",
"url": "/storage/torrents/20261017/xxxx.torrent",
"size": 24576,
"size_text": "24 KB",
"content_size": 1234567890,
"content_size_text": "1.15 GB",
"file_count": 12,
"info_hash": "861C4D149FDECE5164BF1B49B2E09F72ED6DA1D1",
"title": "示例影片",
"magnet": "magnet:?xt=urn:btih:861c4d...&dn=...&tr=...",
"trackers": ["http://tracker.example.com/announce"],
"files": [{ "path": "视频/a.mp4", "size": 1024 }],
"tree": { "name": "示例影片", "type": "dir", "size": 1024, "children": [] }
}
}失败返回 code = 0,msg 为原因(未登录 / 无权限 / 版块不支持 / 后缀不符 / 超出大小 / 解析失败等)。
size 为种子文件自身大小,content_size 为种子内实际内容总大小。
2. 查询种子健康度
GET /torrent/health?id={种子ID}&force={0|1}
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | topic_torrent 记录 ID |
force | int | 否 | 1 表示忽略缓存强制刷新 |
成功返回示例:
{
"code": 1,
"msg": "ok",
"data": {
"ok": true,
"seeders": 128,
"leechers": 36,
"downloads": 2048,
"tracker_count": 3,
"queried_at": 1792212061,
"cached": 0,
"level": "excellent",
"label": "优秀",
"id": 1
}
}说明:
- 取所有 Tracker 响应中的最大值作为展示值
- 最多并发查询 12 个 HTTP(S) Tracker,单个超时由配置决定
- 无可用 Tracker 或全部失败时
ok = false,前端显示「未知」
3. 下载种子文件
GET /torrent/download?id={种子ID}
- 需通过社区下载权限校验(
CommunityPerm::can('download')) - 返回
application/x-bittorrent,并累加download_count
八、数据表
安装后创建 {前缀}topic_torrent,主要字段:
| 字段 | 说明 |
|---|---|
topic_id | 所属帖子 ID |
name | 上传的种子文件名 |
path / url | 本地存储路径与访问地址 |
size | 种子文件大小 |
content_size | 种子内容总大小 |
info_hash | 大写 SHA1 信息哈希 |
title | 种子内标题 |
magnet | 磁力链接 |
file_count | 文件数量 |
download_count | 种子下载次数 |
file_tree | 文件目录树 JSON |
file_list | 普通文件列表 JSON |
trackers | Tracker 列表 JSON |
health / health_time | 健康度缓存 JSON 与缓存时间 |
sort / status | 排序与启用状态 |
卸载插件会删除该表,上传的种子文件不会自动清理。
九、常见问题
1. 发帖页没有「BT种子」面板?
- 确认插件已安装并启用
- 确认当前用户组在「可发布用户组」中(管理员不受限)
- 确认当前版块在「可用版块」中
- 确认社区(community)插件已安装
2. 上传提示「文件超过服务器 POST 限制」?
调整 PHP 的 uploadmaxfilesize 与 postmaxsize,并重启 PHP / Web 服务;插件自身的单文件上限由「单文件大小(MB)」控制。
3. 健康度一直显示「未知」?
- 种子内没有
announce/announce-list,或全部为 UDP Tracker(本插件仅支持 HTTP/HTTPS) - Tracker 已失效、被墙或响应超时
- 可适当调大「健康度查询超时(秒)」,或点击帖子内的刷新按钮重试
4. 修改了 plugins/torrent/static/ 下的文件不生效?
静态资源在安装时复制到 public/static/torrent/。修改源文件后,请在后台对插件执行「升级」,或手动将文件复制到 public/static/torrent/ 并刷新浏览器缓存。
5. 单文件种子为什么没有显示目录层级?
单文件种子的树形视图直接显示该文件本身,不会出现「同名目录 → 同名文件」的重复层级;切换到「列表」视图可查看完整路径。
6. 种子文件保存在哪里?
保存在 public/storage/torrents/,访问地址为 /storage/torrents/...;数据库仅保存相对路径与访问 URL。
7. 删除帖子后种子会清理吗?
删除帖子时插件会同步删除对应的 topic_torrent 记录,但磁盘上的种子文件不会自动删除,可按需定期清理 public/storage/torrents/。
版本历史
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0.0 | 2026-10-17 | 初始版本:种子解析、info_hash / 磁力链接、健康度查询与缓存、树形/列表文件目录、编辑器多附件上传、下载计数 |
更新记录 (1)
-
v1.0.0
2026-10-17
| 版本 | 日期 | 说明 | | --- | --- | --- | | 1.0.0 | 2026-10-17 | 初始版本:种子解析、info_hash / 磁力链接、健康度查询与缓存、树形/列表文件目录、编辑器多附件上传、下载计数 |
QQ官方交流群