Commit Graph

5 Commits

Author SHA1 Message Date
WanWanYun
e5c932a351 feat: 新增本地存储文件夹管理功能
新功能概述:
- 支持在本地存储模式下创建文件夹
- 支持删除文件夹(递归删除)
- 支持重命名文件夹(已有功能,天然支持)
- 文件夹配额计算正确

后端改动:

1. 新增创建文件夹API (backend/server.js)
   - POST /api/files/mkdir
   - 参数: path(当前路径), folderName(文件夹名称)
   - 安全检查: 禁止特殊字符(/ \ .. :),防止路径遍历攻击
   - 仅限本地存储使用
   - 创建前检查文件夹是否已存在

2. 改进删除功能 (backend/storage.js)
   - LocalStorageClient.delete() 现在支持删除文件夹
   - 使用 fs.rmSync(path, { recursive: true }) 递归删除
   - 新增 calculateFolderSize() 方法计算文件夹总大小
   - 删除文件夹时正确更新配额使用情况

前端改动:

1. 新建文件夹按钮 (frontend/app.html)
   - 在"上传文件"按钮旁新增"新建文件夹"按钮
   - 仅本地存储模式显示

2. 新建文件夹弹窗 (frontend/app.html)
   - 简洁的创建表单
   - 支持回车键快速创建
   - 使用优化的弹窗关闭逻辑(防止拖动选择文本时误关闭)

3. 前端API调用 (frontend/app.js)
   - 新增 createFolderForm 状态
   - 新增 createFolder() 方法
   - 前端参数验证
   - 创建成功后自动刷新文件列表

4. 右键菜单优化 (frontend/app.html)
   - 文件夹不显示"下载"按钮(文件夹暂不支持打包下载)
   - 文件夹不显示"分享"按钮(分享单个文件夹暂不支持)
   - 文件夹支持"重命名"和"删除"操作

安全性:
- 文件夹名称严格验证,禁止包含 / \ .. : 等特殊字符
- 路径安全检查,防止目录遍历攻击
- 仅限本地存储模式使用(SFTP存储使用上传工具管理)

配额管理:
- 空文件夹不占用配额
- 删除文件夹时正确释放配额(计算所有子文件大小)
- 删除非空文件夹会递归删除所有内容

使用方式:
1. 登录后切换到本地存储模式
2. 点击"新建文件夹"按钮
3. 输入文件夹名称,点击创建
4. 双击文件夹进入,支持多级目录
5. 右键文件夹可重命名或删除

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 23:46:20 +08:00
7c18e6fea4 fix: 修复storage.js中的正则表达式语法错误
问题:
- getFullPath方法中的正则表达式 [\/\] 语法错误
- 导致"Invalid regular expression: missing /"错误
- 影响文件上传和列表功能

修复:
- 将错误的 [\/\] 修正为 [\/\]
- 添加空值处理 relativePath || ''
- 完善路径处理逻辑,支持Linux和Windows环境

🔐 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 19:25:46 +08:00
04e9ff5b7e fix: 修复两个安全漏洞
1. 修复分享下载接口越权访问漏洞(高危)
   - 添加isPathWithinShare函数验证请求路径是否在分享范围内
   - 单文件分享只允许下载该文件
   - 目录分享只允许下载该目录及子目录的文件
   - 防止攻击者通过构造path参数访问分享者的任意文件
   - 相关文件:backend/server.js

2. 修复本地存储路径处理问题(中高危)
   - 优化getFullPath方法处理绝对路径的逻辑
   - 修复Linux环境下path.join处理'/'导致的路径错误
   - 将绝对路径转换为相对路径,确保正确拼接用户目录
   - 相关文件:backend/storage.js

🔐 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 18:00:09 +08:00
2a58380b32 修复: 优化存储配额检查时机,支持文件覆盖场景
问题描述:
- 上传文件覆盖已有文件时配额检查不准确
- 只检查新文件大小,不考虑旧文件会被删除释放的空间
- 导致误报配额不足,阻止合理的文件覆盖操作
- 空间统计不准确,累积误差

修复内容:
1. 智能配额检查
   - 上传前检测目标文件是否存在
   - 计算净增量(新文件大小 - 旧文件大小)
   - 只在净增量为正时才检查配额
   - 覆盖更小文件时不检查配额

2. 准确的空间更新
   - 使用净增量更新已使用空间
   - 支持负增量(文件变小时减少用量)
   - 避免重复计算导致的累积误差

3. 容错处理
   - try-catch捕获旧文件不存在的情况
   - 确保即使旧文件检查失败也能继续

修复场景示例:
- 配额10GB,已使用9.5GB
- 有一个1GB的旧文件
- 上传0.8GB新文件覆盖
- 修复前: 9.5+0.8=10.3GB > 10GB  拒绝
- 修复后: 9.5-1+0.8=9.3GB < 10GB ✓ 允许

影响范围: 本地存储文件上传功能

测试建议:
- 测试文件覆盖场景配额检查正确
- 验证空间使用统计准确
- 确认新文件上传场景仍正常工作

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 14:28:46 +08:00
WanWanYun
0f133962dc Initial commit - 玩玩云文件管理系统 v1.0.0
- 完整的前后端代码
- 支持本地存储和SFTP存储
- 文件分享功能
- 上传工具源代码
- 完整的部署文档
- Nginx配置模板

技术栈:
- 后端: Node.js + Express + SQLite
- 前端: Vue.js 3 + Axios
- 存储: 本地存储 / SFTP远程存储
2025-11-10 21:50:16 +08:00