FileCodeBox 管理面板完全指南:从登录认证到文件、配置与本地文件的运维实战
2026/9/16 13:34:52 网站建设 项目流程

FileCodeBox 管理面板完全指南:从登录认证到文件、配置与本地文件的运维实战

【免费下载链接】FileCodeBox文件快递柜-匿名口令分享文本,文件,像拿快递一样取文件(FileCodeBox - File Express Cabinet - Anonymous Passcode Sharing Text, Files, Like Taking Express Delivery for Files)项目地址: https://gitcode.com/GitHub_Trending/fi/FileCodeBox

FileCodeBox(文件快递柜)内置了一套功能完善的管理面板,管理员可以登录后台统一管理分享文件、查看系统运行状态并在线修改全部配置。本篇指南以 docs/en/guide/management.md 为主线,结合 apps/admin 模块源码与测试用例,系统讲解管理面板的访问方式、JWT 认证机制、仪表盘指标、文件管理、本地文件管理、系统设置及完整 REST API,帮助你在生产环境安全、高效地运维 FileCodeBox 实例。读完本文,你将掌握从首次初始化、日常文件治理到配置热更新的全部后台操作,并理解其底层实现原理。

访问管理面板

管理面板位于站点根路径下的/admin。整个后台的路由定义在 apps/admin/views.py 中,所有接口统一挂在/admin前缀下,并通过全局依赖admin_required做权限校验。

登录方式

按以下步骤完成首次登录:

  1. 首次运行站点时,系统会自动跳转到初始化页面(/setup),在此页面设置管理员密码;
  2. 在浏览器中访问http://your-domain.com/admin
  3. 输入管理员密码(即admin_token配置项的值);
  4. 点击登录按钮进入后台。

::: tip 提示 未初始化时会自动进入初始化页面。生产环境请先完成初始化,再开放公网访问。 :::

初始化流程的实现在 apps/base/config.py 的initialize_system中:管理员密码会被hash_password哈希后写入数据库,同时校验 JWT 签名密钥是否有效,不足则自动生成。初始化页面由 apps/base/setup_wizard.py 渲染,表单会同步收集上传大小限制、上传频率、取件错误频率、登录失败频率、最长保存时间、提取码类型(数字/随机字符)与允许的过期方式等参数,最小密码长度为 8 位(见 apps/base/config.py)。

显示管理入口

默认情况下,首页不显示管理面板入口,防止入口被恶意扫描。通过配置控制是否在首页显示:

配置项类型默认值说明
show_admin_addrint0是否在首页显示管理入口(1=显示,0=隐藏)

::: warning 安全建议 在公开服务中,建议保持show_admin_addr0,通过直接访问/admin路径进入管理面板,减少被恶意扫描的风险。 :::

该配置项由公开配置接口透出(见 apps/base/setup_wizard.py 中的show_admin_address),并有专门的回归测试 tests/test_issue_480_admin_address.py 验证其开关行为。

认证机制

管理面板使用 JWT(JSON Web Token)进行身份认证,流程如下:

  1. 登录成功后,服务器返回一个包含管理员身份的 Token;
  2. 后续请求通过Authorization: Bearer <token>头部携带 Token;
  3. Token 用于验证管理员身份,确保只有授权用户可以访问管理功能。

登录接口的实现位于 apps/admin/views.py:密码通过verify_password校验,失败会记入ip_limit["login"]频率限制(对应login_count/login_minute配置,默认 5 次/15 分钟);成功后调用create_token生成 HS256 签名的 JWT。Token 的签发与验签逻辑在 apps/admin/dependencies.py:payload 中包含is_admin: trueexp过期时间,签名使用jwt_secret通过 HMAC-SHA256 计算。

会话有效期由admin_session_expire控制,默认 30 天,取值必须是 1~365 之间的整天数(见 core/settings.py 的ADMIN_SESSION_EXPIRE_*常量与 apps/admin/dependencies.py 的校验逻辑)。除POST /admin/login外,所有后台接口都会经过admin_required依赖强制校验(见 apps/admin/dependencies.py)。

仪表盘

登录后首先看到的是仪表盘页面,展示系统的整体运行状态。数据由GET /admin/dashboard接口返回(见 apps/admin/views.py)。

统计指标

仪表盘显示以下关键指标:

指标说明
文件总数(totalFiles)系统中存储的文件总数量
存储使用量(storageUsed)所有文件占用的总存储空间(字节)
系统运行时间(sysUptime)系统首次启动的时间
昨日上传数(yesterdayCount)昨天一整天上传的文件数量
昨日上传量(yesterdaySize)昨天上传文件的总大小(字节)
今日上传数(todayCount)今天到目前为止上传的文件数量
今日上传量(todaySize)今天上传文件的总大小(字节)

指标说明

  • 文件总数:包括所有未过期的文件和文本分享;
  • 存储使用量:显示实际文件占用的存储空间,不包括数据库等系统文件;
  • 昨日/今日统计:基于文件创建时间计算,用于了解系统使用趋势。

::: tip 提示 存储使用量显示的是字节数。例如10485760表示约 10MB。 :::

从源码看,这些指标全部通过 Tortoise ORM 的 SQL 聚合计算(Count/Sum),避免整表载入内存(见 apps/admin/views.py);过期判断有对应的 SQL 版谓词_expired_predicate(apps/admin/views.py),与模型层的is_expired语义保持一致。除文档列出的指标外,接口还会额外返回活跃/过期文件数、文本分享数、分片上传数、存储后端类型、上传限制以及最近 8 个文件与后台操作记录等扩展数据,供新版前端展示健康摘要(health_summary)使用。

文件管理

文件管理页面展示系统中所有已分享的文件,支持分页浏览、搜索、删除、下载与信息修改。

文件列表

列表信息包括:

  • 文件 ID
  • 提取码(code)
  • 文件名前缀(prefix)
  • 文件后缀(suffix)
  • 文件大小
  • 创建时间
  • 过期时间
  • 剩余下载次数

列表接口为GET /admin/file/list(apps/admin/views.py),后端会对page/size做边界保护:page最小为 1,size限制在 1~100 之间。除关键词外,list_files还支持按状态(active/expired)、类型(file/text/chunked)、健康度(如 danger、expiring_soon、storage_issue)过滤,并可指定排序字段与排序方向,合法排序字段由FileService.SORT_FIELDS白名单约束(见 apps/admin/services.py)。

搜索文件

使用搜索功能可以快速找到特定文件:

  1. 在搜索框中输入关键词;
  2. 系统会根据文件名前缀(prefix)进行模糊匹配;
  3. 搜索结果实时更新。

搜索示例:

  • 输入report可以找到所有文件名包含 "report" 的文件;
  • 输入.pdf可以找到所有 PDF 文件(如果文件名包含此字符串)。

源码实现中关键词匹配覆盖更广:_match_admin_file(apps/admin/services.py)会同时对提取码(code)、文件名(name)、前缀(prefix)、后缀(suffix)、文件哈希(file_hash)乃至文本分享内容做不区分大小写的子串匹配。

分页浏览

文件列表支持分页显示:

参数默认值说明
page1当前页码
size10每页显示数量

删除文件

管理员可以删除任意文件:

  1. 在文件列表中找到要删除的文件;
  2. 点击删除按钮;
  3. 确认删除操作。

::: danger 警告 删除操作不可恢复!文件将从存储后端永久删除,同时删除数据库中的记录。 :::

删除流程:

  1. 系统首先从存储后端(本地/S3/OneDrive 等)删除实际文件;
  2. 然后从数据库中删除文件记录;
  3. 删除后,对应的提取码将失效。

核心实现是 apps/admin/services.py 的_delete_file_code:文本分享只删数据库记录,普通文件则先调用存储接口delete_file删除实体文件,再清理关联的元数据记录并删除FileCodes行。删除单个文件的接口为DELETE /admin/file/delete(apps/admin/views.py),另外还提供了DELETE/POST /admin/file/batch-delete批量删除接口,返回包含成功/缺失/失败明细的统计结果。

下载文件

管理员可以直接下载任意文件:

  1. 在文件列表中找到目标文件;
  2. 点击下载按钮;
  3. 文件将通过浏览器下载。

对于文本分享,系统会直接返回文本内容而不是下载文件。接口为GET /admin/file/download?id=123(apps/admin/views.py),对应服务方法download_file(apps/admin/services.py):文本分享直接返回text字段,普通文件则从当前配置的存储后端取出文件响应流。后台还提供GET /admin/file/preview预览接口,可对文本分享返回最多 20000 字符(默认 4000)的预览内容。

修改文件信息

管理员可以修改已分享文件的部分信息:

可修改字段说明
code提取码(必须唯一,不能与其他文件重复)
prefix文件名前缀
suffix文件后缀名
expired_at过期时间
expired_count剩余下载次数

修改提取码:

原提取码:abc123 新提取码:myfile2024

::: warning 注意 修改提取码时,系统会检查新提取码是否已被使用。如果已存在相同的提取码,修改将失败。 :::

接口为PATCH /admin/file/update(apps/admin/views.py),服务端update_file(apps/admin/services.py)在修改code前会先查询FileCodes表,若新 code 已被占用则返回 400「code已存在」,只有字段确实发生变化时才会写库。此外后台还提供批量更新(/file/batch-update)、批量策略动作(/file/batch-policy-action)接口,策略动作支持延长 24 小时/7 天、设为永久、重置下载次数(apps/admin/services.py),以及文件备注与标签元数据(/file/metadata)、视图预设(/file/view-presets)等扩展能力。

本地文件管理

除了管理已分享的文件,管理面板还提供了本地文件管理功能,用于管理data/local目录中的文件。对应服务类为 apps/admin/services.py 的LocalFileService

查看本地文件

本地文件列表显示data/local目录中的所有文件:

信息说明
文件名文件的完整名称
创建时间文件的创建时间
文件大小文件大小(字节)

接口为GET /admin/local/lists,若目录不存在会自动创建。

分享本地文件

可以将本地文件快速分享:

  1. 在本地文件列表中选择要分享的文件;
  2. 设置过期方式和过期值;
  3. 点击分享按钮;
  4. 系统生成提取码。

分享参数:

参数说明
filename要分享的文件名
expire_style过期方式(day/hour/minute/forever/count)
expire_value过期值(天数/小时数/分钟数/下载次数)

分享流程由share_local_file(apps/admin/services.py)实现:先通过reserve_storage预占配额(1 小时 TTL),再把文件读入内存写入当前存储后端并创建FileCodes记录,最后释放预占配额;若建记录失败会回滚删除刚写入的存储文件。

删除本地文件

可以删除data/local目录中的文件:

  1. 在本地文件列表中找到要删除的文件;
  2. 点击删除按钮;
  3. 确认删除。

::: tip 使用场景 本地文件管理功能适用于:

  • 批量上传文件到服务器后进行分享;
  • 管理通过其他方式上传到服务器的文件;
  • 清理不需要的本地文件。 :::

安全性上,LocalFileClass(apps/admin/services.py)只允许data/local目录下的单层文件名:会拒绝包含路径分隔符、绝对路径、./..等输入,并通过resolve()relative_to()校验确保路径始终落在本地目录内,阻断路径穿越攻击。删除接口DELETE /admin/local/delete与分享接口POST /admin/local/share分别对应 apps/admin/views.py。

系统设置

查看配置

在系统设置页面可以查看当前所有配置项的值。配置项按类别分组显示:

  • 基础设置(站点名称、描述等)
  • 上传设置(文件大小限制、频率限制等)
  • 存储设置(存储类型、路径等)
  • 主题设置(主题选择、透明度等)
  • 安全设置(管理员密码、错误限制等)

配置读取接口为GET /admin/config/get(apps/admin/views.py)。ConfigService.get_config(apps/admin/services.py)返回运行时全量配置,但会将admin_token置空并剔除内部键(如jwt_secret),避免敏感信息泄露——内部键白名单定义在 core/security.py。

修改配置

管理员可以通过管理面板修改大部分配置:

  1. 进入系统设置页面;
  2. 找到要修改的配置项;
  3. 输入新的值;
  4. 点击保存按钮。

可修改的配置项:

类别配置项示例
基础设置name,description,keywords,notify_title,notify_content
上传设置upload_size,upload_minute,upload_count,open_upload,enable_chunk
过期设置expire_style,max_save_seconds
主题设置themes_select,opacity,background
安全设置admin_token,show_admin_addr,error_minute,error_count
存储设置file_storage,storage_path及各存储后端的配置

配置更新接口为PATCH /admin/config/update(apps/admin/views.py),服务端ConfigService.update_config(apps/admin/services.py)做了多层校验与安全处理:

  • admin_token不能为空;明文密码提交时会自动升级为哈希存储,并同步轮换jwt_secret,保证改密后旧 Token 立即失效;
  • themes_choices在接口层被强制剔除(apps/admin/views.py),不可通过后台修改;
  • 整数与浮点字段(INT_FIELDS/FLOAT_FIELDS,见 apps/admin/services.py)会做类型强转,格式错误返回 400;
  • admin_session_expire必须是 1~365 个整天、storage_limit不能小于 0、background发生变化时需通过 URL 校验。

::: warning 注意

  • admin_token(管理员密码)不能设置为空;
  • themes_choices(主题列表)不可通过管理面板修改;
  • 修改存储设置后,已有文件不会自动迁移。 :::

配置生效

配置修改后立即生效,无需重启服务。配置保存在数据库中,重启后仍然有效。

配置存储位置:

  • 数据库:data/filecodebox.db
  • 表名:keyvalue
  • 键名:settings

配置的运行时加载由 apps/base/config.py 的refresh_settings完成:写入路径调用refresh_settings(force=True)强制刷新,进程内带 2 秒 TTL 缓存避免每请求查库;_sync_ip_limits会把限流参数同步到各频率限制器。默认配置全集(含各存储后端参数、主题列表、服务端口等)见 core/settings.py。

API 接口

管理面板的所有功能都通过 REST API 实现,以下是主要接口(完整路由见 apps/admin/views.py)。除登录外,所有请求都需携带Authorization: Bearer <token>头。

认证接口

登录

POST /admin/login Content-Type: application/json { "password": "your-admin-password" }

响应:

{ "code": 200, "detail": { "token": "eyJhbGciOiJIUzI1NiIs...", "token_type": "Bearer" } }

实际响应中还包含expires_inexpires_at,便于前端实现会话倒计时。

仪表盘接口

获取统计数据

GET /admin/dashboard Authorization: Bearer <token>

文件管理接口

获取文件列表

GET /admin/file/list?page=1&size=10&keyword= Authorization: Bearer <token>

删除文件

DELETE /admin/file/delete Authorization: Bearer <token> Content-Type: application/json { "id": 123 }

下载文件

GET /admin/file/download?id=123 Authorization: Bearer <token>

修改文件信息

PATCH /admin/file/update Authorization: Bearer <token> Content-Type: application/json { "id": 123, "code": "newcode", "expired_at": "2024-12-31T23:59:59" }

本地文件接口

获取本地文件列表

GET /admin/local/lists Authorization: Bearer <token>

删除本地文件

DELETE /admin/local/delete Authorization: Bearer <token> Content-Type: application/json { "filename": "example.txt" }

分享本地文件

POST /admin/local/share Authorization: Bearer <token> Content-Type: application/json { "filename": "example.txt", "expire_style": "day", "expire_value": 7 }

配置接口

获取配置

GET /admin/config/get Authorization: Bearer <token>

更新配置

PATCH /admin/config/update Authorization: Bearer <token> Content-Type: application/json { "admin_token": "new-password", "upload_size": 52428800 }

上述核心接口均有自动化测试覆盖,可参考 tests/test_admin_security.py、tests/test_api_contract.py 与 tests/test_integration_journey.py,它们验证了登录鉴权、接口契约与登录后完整操作链路的行为。

常见问题

忘记管理员密码

如果忘记了管理员密码,可以通过以下方式重置:

  1. 停止 FileCodeBox 服务;
  2. 使用 SQLite 工具打开data/filecodebox.db
  3. 查询keyvalue表中key='settings'的记录;
  4. 修改 JSON 中的admin_token值;
  5. 重启服务。
-- 查看当前配置 SELECT * FROM keyvalue WHERE key = 'settings'; -- 或者删除配置,重启后重新进入初始化流程 DELETE FROM keyvalue WHERE key = 'settings';

需要说明的是,admin_token在库中保存的是经过哈希的口令而非明文(见 core/utils.py 的hash_password/verify_password与 core/security.py 的哈希迁移逻辑),直接手改哈希值存在风险。更稳妥的做法是执行DELETE FROM keyvalue WHERE key = 'settings';后重启服务,通过初始化页面重新设置管理员密码与各项参数;系统在启动时会检测空密码/旧版默认密码并提示重新初始化(见 apps/base/config.py 与 tests/test_password_hashing.py)。

文件删除失败

如果删除文件时出现错误,可能的原因:

  1. 存储后端连接失败:检查存储配置是否正确;
  2. 文件已不存在:文件可能已被手动删除;
  3. 权限不足:检查存储目录的写入权限。

配置修改不生效

如果修改配置后没有生效:

  1. 检查是否点击了保存按钮;
  2. 刷新页面查看配置是否已保存;
  3. 检查浏览器控制台是否有错误信息;
  4. 确认配置值的格式是否正确(如数字类型不要输入字符串,admin_session_expire需为 1~365 的整天数,background需通过 URL 格式校验)。

下一步

  • 配置指南 - 了解所有配置选项的详细说明
  • 安全设置 - 了解如何增强系统安全性
  • 存储配置 - 配置不同的存储后端

【免费下载链接】FileCodeBox文件快递柜-匿名口令分享文本,文件,像拿快递一样取文件(FileCodeBox - File Express Cabinet - Anonymous Passcode Sharing Text, Files, Like Taking Express Delivery for Files)项目地址: https://gitcode.com/GitHub_Trending/fi/FileCodeBox

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询