📋 分享状态与生命周期管理
版本 v1.0 | 更新日期:2026年3月26日 | 智能文件管理系统
一、分享状态定义
●
活跃 (ACTIVE)
分享正常可用,用户可以访问、预览和下载文件。
- ✅ 正常访问
- ✅ 可下载文件
- ✅ 统计浏览次数和下载次数
●
已过期 (EXPIRED)
分享已超过设定的有效期,自动失效。
- ⚠️ 链接失效,无法访问
- ⏰ 可通过"延长有效期"恢复
- 📊 历史统计数据保留
●
已撤销 (REVOKED)
用户主动撤销分享,链接永久失效。
- ❌ 链接永久失效
- 🔒 不可恢复,需重新创建
- 📊 历史统计数据保留
●
已归档 (ARCHIVED)
过期的旧分享自动归档,便于后续查阅。
- 📦 不可访问
- 🗂️ 仅用于历史记录查询
- ⏱️ 定期自动清理
二、撤销 vs 过期 - 核心区别
| 对比项 |
撤销 (Revoke) |
过期 (Expire) |
| 触发方式 | 👤 用户主动操作 | 🤖 系统自动触发 |
| 触发时机 | 点击"撤销分享"按钮 | expiresAt < 当前时间 |
| 原因 | 用户不再想分享该文件 | 到达设定的有效期 |
| 可逆性 | ❌ 不可逆(需重新创建) | ✅ 可延长有效期恢复 |
| HTTP状态码 | 403 Forbidden | 410 Gone |
| 用户提示 | "该分享已被撤销,无法访问" | "该分享已过期,无法访问" |
| 示例场景 | 分享链接泄露,立即撤销 | 设置7天有效期,自动过期 |
三、状态流转图
创建
ACTIVE
→
活跃
ACTIVE
→
已过期
EXPIRED
↺
重新激活
REACTIVATE
活跃
ACTIVE
→
已撤销
REVOKED
✗
不可恢复
已过期
EXPIRED
→
已归档
ARCHIVED
→
定期清理
四、用户访问流程
2
检查状态
active / expired / revoked
→
五、数据库关键字段
| 字段名 | 类型 | 说明 |
status | enum | 状态:active, expired, revoked, archived, limited |
expires_at | timestamp | 过期时间(NULL表示永久有效) |
revoked_at | timestamp | 撤销时间(撤销时记录) |
revoked_reason | string | 撤销原因 |
view_count | int | 浏览次数 |
download_count | int | 下载次数 |
max_views | int | 最大浏览次数限制 |
max_downloads | int | 最大下载次数限制 |
last_accessed_at | timestamp | 最后访问时间 |
六、状态码与用户提示
| 状态 | 状态码 | 用户提示 |
| active | 200 OK | 正常访问,显示文件内容 |
| expired | 410 Gone | "该分享已过期,请联系分享者延长有效期" |
| revoked | 403 Forbidden | "该分享已被撤销,无法访问" |
| archived | 404 Not Found | "该分享已归档,无法访问" |
七、前端展示逻辑
●
我的分享页面
- 活跃中:绿色标签,可操作撤销/延长/复制链接
- 已过期:灰色标签,仅可延长有效期
- 已撤销:红色标签,不可操作
●
公开分享广场
- 未过期:正常显示,可点击访问
- 已过期:灰色背景 + 删除线标题 + 过期横幅 + 红色边框
八、用户可执行操作
| 操作 | 适用状态 | 说明 |
| 📋 复制链接 | active, expired | 复制分享链接和提取码 |
| ⏰ 延长有效期 | active, expired | 延长7/30天,可恢复过期分享 |
| 🗑️ 撤销分享 | active | 永久撤销,不可恢复 |
| 📊 查看统计 | 所有状态 | 查看浏览次数、下载次数等 |
九、相关API接口
| 接口 | 方法 | 说明 |
/api/shares | POST | 创建分享 |
/api/shares/:id/extend | POST | 延长有效期 |
/api/shares/:id/revoke | POST | 撤销分享 |
/api/shares/:id/reactivate | POST | 重新激活已过期的分享 |
/s/:code | GET | 访问分享 |