BT种子附件解析

BT种子附件解析内容管理

版本 v1.0.0· 胡思乱想 · 2 次获取 · 内容管理
为社区帖子提供 BT 种子(.torrent)附件能力
¥5.00抵扣
一次购买,永久使用

详情介绍

BT种子解析插件(torrent)使用文档

版本:1.0.0 | 作者:kuakeba.cn | 适用于 Zsens Admin 3.0+(PHP 8.2+)

一、插件简介

为社区帖子提供 BT 种子(.torrent)附件能力:

  • 发帖页上传 .torrent 文件,服务端自动解析种子
  • 自动计算 info_hash(SHA1),生成磁力链接(含 Tracker)
  • 查询种子健康度:做种数 / 下载数,展示等级徽章,支持手动刷新
  • 帖子正文输出文件目录,支持树形目录与普通列表两种视图切换
  • 支持单帖挂载多个种子、目录折叠、磁力链接一键复制、种子文件下载

二、环境要求

项目要求
Zsens Admin3.0+
PHP8.2+
社区插件(community)必须安装(发帖、帖子正文、版块权限的宿主)
cURL 扩展推荐开启;未开启时健康度查询退化为顺序请求,速度较慢
目录写入权限public/storage/torrents/ 需可写(安装后首次上传自动创建)

三、安装步骤

  1. 将 torrent 目录整体放入项目 plugins/ 下
  2. 进入后台 应用中心,找到「BT种子解析」,点击 安装
  3. 安装时自动:

  - 创建数据表 {前缀}topic_torrent

  - 将 plugins/torrent/static/ 复制到 public/static/torrent/

  1. 进入 应用中心 → BT种子解析 → 配置,按需调整配置项
  2. 确保已安装并启用 社区(community) 插件
插件通过前台渲染钩子自动挂载,无需修改主题模板;发帖页的「BT种子」拓展面板也会自动注册。

四、配置项说明

后台 应用中心 → BT种子解析 → 配置:

配置项键名默认值说明
启用BT种子解析enabled开启总开关。关闭后发帖页不展示种子拓展,帖内也不渲染种子区块
可发布用户组publishlevelids空仅勾选的用户组可上传种子;不勾选表示全部用户组不可用;后台管理员不受限
可用版块category_ids空仅勾选的版块发帖时可使用种子拓展;不勾选表示全部版块不可用
允许后缀allow_exttorrent英文逗号分隔,不区分大小写
单文件大小(MB)maxsizemb5单个种子文件上限,范围 0.1–1024
单帖种子数量max_files3每个主题最多挂载的种子数
显示磁力链接show_magnet开启帖内展示完整磁力链接与复制/磁力下载按钮
显示信息哈希showinfohash开启帖内展示 info_hash(大写 SHA1)并支持复制
种子健康度查询health_enabled开启关闭后帖内不显示健康度,也不提供刷新接口
健康度缓存(分钟)healthcacheminutes30缓存期内直接复用查询结果;0 表示不缓存
健康度查询超时(秒)health_timeout3单个 Tracker 请求超时,范围 1–10
文件目录默认视图list_mode树形目录可选「树形目录」或「普通列表」
默认展开文件目录list_expand开启关闭后文件目录默认折叠,用户点击「展开全部文件」后展开

五、发帖使用

  1. 进入允许的版块发帖,在编辑器下方找到 「BT种子」 拓展面板
  2. 点击 选择种子文件,可一次选择多个 .torrent(受「单帖种子数量」限制)
  3. 上传成功后自动展示解析结果:种子标题、内容大小、文件数、info_hash、磁力链接
  4. 可在列表中删除不需要的种子
  5. 正常发布帖子,种子信息随帖子保存

注意事项:

  • 前端会先校验后缀、单文件大小与数量;服务端会再次校验
  • 保存时服务端会优先重新解析本地种子文件,前端数据仅作兜底,避免伪造 info_hash / 磁力链接
  • 上传期间请勿提交表单,避免种子数据未同步
  • 后台管理员在后台编辑帖子时同样可以管理种子

六、前台展示

帖子正文下方自动渲染「种子资源」区块,每个种子包含:

区域说明
标题栏种子内标题、种子文件大小、内容总大小、文件数量
操作按钮磁力下载(magnet: 链接)、下载种子(.torrent 文件)
磁力链接完整磁力链接,支持「复制」,过长时支持展开/收起
信息哈希info_hash 展示与一键复制(受配置开关控制)
种子健康度等级徽章 + 做种数/下载数,支持手动刷新(受配置开关控制)
文件列表树形目录 / 普通列表切换;目录可点击折叠;文件过多时可「展开全部文件」

健康度等级规则:

等级条件
优秀做种数 ≥ 10
良好做种数 ≥ 3
一般做种数 ≥ 1
无做种做种数为 0
未知无可用 HTTP(S) Tracker,或 Tracker 均查询失败

七、接口说明

1. 上传并解析种子

POST /torrent/upload

参数类型必填说明
filefile是.torrent 种子文件
category_idint否当前版块 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}

参数类型必填说明
idint是topic_torrent 记录 ID
forceint否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
trackersTracker 列表 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.02026-10-17初始版本:种子解析、info_hash / 磁力链接、健康度查询与缓存、树形/列表文件目录、编辑器多附件上传、下载计数


更新记录 (1)

  • v1.0.0 2026-10-17
    | 版本 | 日期 | 说明 | | --- | --- | --- | | 1.0.0 | 2026-10-17 | 初始版本:种子解析、info_hash / 磁力链接、健康度查询与缓存、树形/列表文件目录、编辑器多附件上传、下载计数 |
微信客服 微信客服 QQ官方交流群 QQ官方交流群