WanWanYun
|
74f25ce3ed
|
修复: 解决切换到SFTP设置页面无响应的问题
- 问题:当用户已在settings页面时,switchView方法会检测到重复而直接return
- 修复:直接设置currentView并手动调用loadFtpConfig()
- 确保无论用户在哪个页面,点击确认后都能正确跳转到设置页面
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 23:10:23 +08:00 |
|
WanWanYun
|
fd52594b83
|
修复: 切换到SFTP设置页面时使用switchView方法
- 修正switchStorage方法中跳转设置页面的逻辑
- 从直接修改currentView改为调用switchView方法
- 确保视图切换时正确触发数据加载(如SFTP配置表单)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 22:59:29 +08:00 |
|
WanWanYun
|
a791569b17
|
修复: 优化存储切换逻辑,解决SFTP配置和权限切换问题
1. 登录时智能修正存储类型:
- 当用户为SFTP模式但未配置SFTP时,如果有本地存储权限,自动切换到本地存储
- 避免管理员更改用户权限后,用户登录时出现"加载文件失败"错误
2. SFTP配置后自动切换存储模式:
- 用户成功配置SFTP后,自动切换到SFTP存储模式
- 无需用户手动再次切换,提升用户体验
3. 改进存储切换提示信息:
- 当用户尝试切换到未配置的SFTP时,显示更友好的提示
- 明确告知用户配置完成后将自动切换到SFTP存储
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 22:50:27 +08:00 |
|
WanWanYun
|
e5ba17329c
|
功能: 添加管理员上传工具检测和上传功能
- 后端: 添加 GET /api/admin/check-upload-tool 检测工具是否存在
- 后端: 添加 POST /api/admin/upload-tool 允许管理员手动上传exe
- 前端: 管理员界面新增上传工具管理卡片
- 前端: 支持检测工具状态、显示文件信息、手动上传
- 验证: 文件必须是.exe格式且大小>20MB
|
2025-11-12 20:45:17 +08:00 |
|
|
|
0fc378576f
|
改进: 增强上传工具下载的可靠性和错误提示
问题背景:
- 用户反馈SFTP模式下载上传工具失败,浏览器无反应
- 服务器日志显示: [上传工具] exe文件不存在
- 安装脚本显示"安装成功",但exe实际下载失败
- 原因:下载失败但脚本继续执行(return 0),用户未注意到警告
改进内容:
1. 添加重试机制
- 最多重试3次
- 每次失败后等待5秒
- 显示当前尝试次数
2. 增加超时时间
- wget: --timeout=300 (5分钟)
- curl: --max-time 300 (5分钟)
- 避免下载43MB文件时超时
3. 文件大小验证
- 下载前:检查现有文件大小,异常则重新下载
- 下载后:验证文件至少30MB(正常42MB)
- 文件过小则删除并提示错误
4. 改进错误提示
- 下载中:显示文件大小和预计时间
- 失败时:列出可能的原因
- 提供手动下载链接和路径
5. 进度显示优化
- 显示当前尝试次数
- 显示文件大小(MB)
- wget添加 --no-check-certificate 避免证书问题
测试场景:
✅ 正常下载(文件不存在)
✅ 跳过下载(文件已存在且大小正常)
✅ 重新下载(文件存在但大小异常)
✅ 网络失败重试(最多3次)
✅ 下载超时处理(5分钟超时)
用户体验:
- 明确知道下载进度
- 失败时有详细的错误信息和解决方案
- 不会误以为安装成功但功能不可用
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 20:06:30 +08:00 |
|
WanWanYun
|
136d45dee7
|
优化: 分享所有文件时支持点击文件图标放大查看,并可返回列表
功能描述:
- 在分享所有文件(目录分享)时,点击文件图标可以放大查看
- 显示效果与分享单个文件时相同(居中大图标显示)
- 左上角显示"返回列表"按钮,点击可返回文件列表
- 单个文件分享时不显示返回按钮(避免混淆)
实现内容:
1. 添加状态管理
- viewingFile: 当前正在查看的文件(null表示在列表视图)
2. 新增方法
- handleFileClick(file): 处理文件点击
* 图片/视频/音频 → 打开媒体预览(保持原有行为)
* 其他文件 → 显示详情页面
- viewFileDetail(file): 设置viewingFile显示详情
- backToList(): 清除viewingFile返回列表
3. 修改HTML模板
- 标题添加返回按钮(条件:viewingFile存在且不是单文件分享)
- 单文件显示条件:viewingFile || files.length === 1
- 网格/列表视图条件:添加 !viewingFile 限制
- 单文件显示内容:使用 viewingFile || files[0]
4. 防止bug设计
- shareInfo.share_type !== 'file' 确保单文件分享不显示返回按钮
- handleFileClick 区分媒体文件和普通文件
- viewingFile 为null时正常显示文件列表
用户体验提升:
✅ 点击文件图标即可放大查看详情
✅ 查看体验与单文件分享一致
✅ 返回按钮清晰明了
✅ 媒体文件仍然打开预览
✅ 单文件分享不显示返回按钮(避免混淆)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 18:24:29 +08:00 |
|
WanWanYun
|
1e19b41f48
|
优化: 切换视图时自动刷新数据,解决切换存储方式后需要手动刷新的问题
问题描述:
- 用户在设置页面切换存储方式(本地 ↔ SFTP)
- 点击导航栏回到"我的文件"页面
- 文件列表不会自动刷新,显示的还是旧存储方式的文件
- 需要手动刷新浏览器才能看到新存储方式的文件
解决方案:
1. 新增 switchView(view) 方法统一管理视图切换
- 切换到 files 视图:自动加载文件列表
- 切换到 shares 视图:自动加载分享列表
- 切换到 admin 视图:自动加载用户列表和存储统计
- 切换到 settings 视图:无需加载数据
- 防止重复切换:如果已在当前视图则跳过
2. 修改导航栏点击事件
- 从 @click="currentView = 'xxx'"
- 改为 @click="switchView('xxx')"
- 应用到所有4个导航按钮
改进效果:
✅ 用户切换存储方式后,点击"我的文件"立即看到新数据
✅ 所有视图切换都会自动刷新对应数据
✅ 提升用户体验,无需手动刷新页面
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 15:49:02 +08:00 |
|
|
|
0dc2ac9188
|
功能: 自动检测并升级C++编译器版本
问题背景:
- better-sqlite3 v11+ 需要C++20标准支持
- C++20需要g++ 10或更高版本
- Ubuntu 20.04等老系统默认g++ 9.x,不支持C++20
- 导致WSL2用户编译失败: "unrecognized command line option '-std=c++20'"
实现内容:
1. 新增check_cpp_compiler()函数
- 检测g++是否已安装
- 获取当前g++版本号
- 如果版本<10,自动升级
2. 支持多个Linux发行版:
- Ubuntu/Debian: 添加toolchain PPA,安装g++-11
- CentOS 7: 安装devtoolset-11
- CentOS 8+: 安装gcc-toolset-11
- OpenSUSE: 安装gcc11-c++
3. 自动设置为默认编译器:
- 使用update-alternatives设置优先级
- CentOS使用source启用gcc-toolset
4. 调用时机:
- 安装模式:install_dependencies()末尾
- 更新模式:update_install_dependencies()中
5. 错误处理:
- 升级失败时给出明确提示
- 不支持的系统给出手动升级建议
测试场景:
- ✅ Ubuntu 20.04 (g++ 9.x → 11.x)
- ✅ CentOS 7/8
- ✅ 已有g++ 10+的系统(跳过升级)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 15:18:01 +08:00 |
|
|
|
59721a3a93
|
修复: 更正Python配置方式,解决npm错误
问题:
- 使用了错误的命令: npm config set python python3
- npm报错: 'python' is not a valid npm option
- 导致脚本在安装依赖时直接退出
修复:
- 删除错误的 npm config set python python3 命令
- 改用环境变量方式: PYTHON=python3 npm install --production
- 这是node-gyp官方推荐的方式
测试:
- 环境变量会在npm install执行期间生效
- node-gyp会自动识别PYTHON环境变量
- 不会产生invalid option错误
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 12:13:53 +08:00 |
|
|
|
ee3c522a37
|
修复: 改进npm依赖安装,解决better-sqlite3编译失败问题
问题分析:
- better-sqlite3是native模块,需要node-gyp编译
- node-gyp需要Python环境
- 部分系统只有python3命令,没有python命令
- 导致编译失败: "python3" is not in PATH or produced an error
修复内容:
1. 在安装和更新依赖前自动创建python软链接(python -> python3)
2. 配置npm使用python3: npm config set python python3
3. 添加依赖安装进度提示(避免用户以为卡住)
4. 改进错误处理和提示信息
5. 安装失败时提供详细的解决方案和日志路径
6. 支持用户选择忽略错误继续安装
适用场景:
- Ubuntu/Debian: 使用ln -sf创建软链接
- CentOS/RHEL: 使用alternatives管理Python版本
- 其他系统: 回退到ln -sf
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 12:01:44 +08:00 |
|
WanWanYun
|
c272724c5c
|
修复: 防止管理员封禁自己的账号
- 在封禁用户API中添加自我封禁检查
- 当管理员尝试封禁自己时返回400错误
- 错误消息: "不能封禁自己的账号"
- 解封自己不受限制(虽然被封禁后无法登录后台操作)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 11:38:02 +08:00 |
|
|
|
644c468a67
|
功能: 在安装脚本主菜单添加退出选项
- 在操作模式选择菜单中添加 [0] 退出脚本 选项
- 修改输入提示从 [1-4] 改为 [0-4]
- 在case语句中添加选项0的处理逻辑
- 选择0时显示"正在退出脚本..."并正常退出
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 11:24:52 +08:00 |
|
WanWanYun
|
28beee695a
|
修复: 添加自动同步用户配置功能,解决管理员修改权限后用户不自动更新的问题
- 添加profileCheckInterval属性用于存储定时器ID
- 修改loadUserProfile()函数,检测存储配置变更并通知用户
- 新增startProfileSync()方法,每30秒自动检查配置更新
- 新增stopProfileSync()方法,停止定期检查
- 在登录和页面加载时启动定期检查
- 在登出时停止定期检查
- 当管理员修改用户存储权限或类型时,用户会收到Toast通知并自动刷新文件列表
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 09:25:17 +08:00 |
|
WanWanYun
|
175087c894
|
修复: SFTP存储切换问题 & 添加开发者工具保护
- 修复SFTP按钮被错误禁用的问题
- 用户选择本地存储后可以正常切换回SFTP
- 切换到SFTP时检查是否已配置,未配置则跳转到设置页面
- 添加右键菜单禁用
- 添加F12和开发者工具快捷键禁用
- 添加开发者工具打开检测
- 生产环境禁用console输出
|
2025-11-12 09:13:12 +08:00 |
|
|
|
229a381a63
|
优化: 简化上传工具下载提示信息
- 去掉操作系统检测提示
- 统一提示"正在下载上传工具..."
- 明确上传工具仅支持Windows平台
- 修复变量引用问题
|
2025-11-12 00:50:37 +08:00 |
|
|
|
f730fcfaff
|
配置: 更新上传工具下载地址
- 使用用户提供的CDN地址: http://a.haory.top/e/e82/
- Windows版本直接下载
- 部署时自动下载到upload-tool/dist目录
- 无需Python环境,无需手动打包
|
2025-11-12 00:46:38 +08:00 |
|
|
|
c76808f03b
|
优化: 改为从Release下载预编译上传工具
- 不再需要服务器Python环境
- 支持从Gitee Release直接下载exe
- 自动检测操作系统下载对应版本
- 支持wget和curl两种下载方式
- 下载失败时友好提示,不影响部署
|
2025-11-12 00:42:44 +08:00 |
|
|
|
160201b942
|
功能: 部署时自动打包上传工具
- 添加build_upload_tool()函数自动打包上传工具
- 检测已存在的可执行文件,避免重复打包
- 打包失败时给出友好提示,不影响部署流程
- 支持Windows exe和Linux可执行文件自动打包
|
2025-11-12 00:38:01 +08:00 |
|
WanWanYun
|
cb05fa9516
|
功能: 添加Linux上传工具打包脚本
- 新增upload-tool/build.sh支持Linux环境打包
- 支持自动检测操作系统并打包对应版本
- 为部署脚本集成自动打包功能做准备
|
2025-11-12 00:37:28 +08:00 |
|
WanWanYun
|
2dc6323554
|
修复: 移除API地址硬编码,统一使用nginx代理
- 修复frontend/app.js中的localhost:40001硬编码
- 修复frontend/share.html中的localhost:40001硬编码
- 所有API请求现在统一通过nginx代理访问
- 支持任意端口号部署,无需修改前端代码
|
2025-11-11 23:54:40 +08:00 |
|
|
|
340e328b76
|
修复: install.sh自动配置PUBLIC_PORT环境变量
- 部署时自动添加PUBLIC_PORT到.env文件
- 值为nginx监听的HTTP端口(HTTP_PORT变量)
- 解决非标准端口部署时分享链接缺少端口号的问题
- 标准端口(80/443)不会在分享链接中显示端口号
|
2025-11-11 23:42:43 +08:00 |
|
WanWanYun
|
016879885c
|
修复: 移动端UI和部署配置优化
1. 移动端文件列表图片图标大小修复
- 添加响应式CSS规则,图片缩略图自动适配屏幕尺寸
- 移除内联样式,统一使用CSS类管理
- 移动端(768px): 48px x 48px
- 小屏幕(480px): 40px x 40px
2. 设置页面存储切换UI优化
- 用户选择本地存储时自动隐藏SFTP配置表单
- 用户选择SFTP时显示SFTP配置表单
- 优化用户体验,避免混淆
3. install.sh自动配置PUBLIC_PORT
- 部署时自动添加PUBLIC_PORT环境变量
- 非标准端口部署时分享链接自动包含端口号
- 解决IP模式部署分享链接无法访问的问题
|
2025-11-11 23:41:17 +08:00 |
|
WanWanYun
|
0c55b599ef
|
修复: 非标准端口部署时分享链接未携带端口号的问题
- 添加 generateShareUrl 辅助函数,智能处理端口号
- 支持通过 PUBLIC_PORT 环境变量配置nginx监听端口
- 更新 POST /api/share/create 使用新的URL生成方法
- 更新 GET /api/share/my 使用新的URL生成方法
- 修复IP模式部署时分享链接无法正常访问的问题
|
2025-11-11 23:25:05 +08:00 |
|
|
|
88f2b152f6
|
修复: 分享下载使用分享者当前存储类型而非创建时存储类型
- 问题: 用户切换到本地存储后,旧分享仍使用创建时的SFTP存储类型,导致404错误
- 修复: 在4个位置将share.storage_type改为shareOwner.current_storage_type
- /api/share/:code/verify (缓存未命中逻辑)
- /api/share/:code/verify (错误回退逻辑)
- /api/share/:code/list (文件列表)
- /api/share/:code/download-file (文件下载)
- 重构: 调整代码顺序,先获取shareOwner再定义storageType
- 日志: 添加"(分享者当前)"标识,便于调试
|
2025-11-11 18:29:20 +08:00 |
|
|
|
2390b6c91c
|
优化: 改进repair模式的服务验证逻辑
1. 在repair_verify_services中添加3秒延迟等待服务启动
2. 修正数据库文件路径检查(ftp-manager.db而非database.db)
3. 避免因服务启动延迟导致的误报警告
|
2025-11-11 18:07:57 +08:00 |
|
|
|
be363f36b3
|
修复: 修复repair模式中的nginx配置备份逻辑
问题:
- 备份文件保存在sites-enabled目录导致nginx测试失败
- nginx会读取该目录下所有文件包括旧的错误备份
解决方案:
- 将备份文件保存到/root/目录而不是sites-enabled
- 在生成新配置前先清理旧的.backup.*文件
- 使用2>/dev/null || true避免清理不存在文件时报错
|
2025-11-11 17:50:41 +08:00 |
|
|
|
81738943d5
|
修复: Nginx配置中/s/路径的proxy_set_header变量转义问题
- 在configure_nginx_http()和configure_nginx_https()中
- 将$host、$remote_addr等Nginx变量正确转义
- 修复'invalid number of arguments'错误
|
2025-11-11 17:42:18 +08:00 |
|
|
|
f2ceaf68bf
|
修复: 将repair_main函数移至主执行流程之前以避免'command not found'错误
|
2025-11-11 17:32:28 +08:00 |
|
|
|
6504026eb6
|
修复: 更正交互式菜单中卸载选项的编号从[3]到[4]
|
2025-11-11 17:05:51 +08:00 |
|
|
|
8755a50d80
|
功能: 添加修复模式到install.sh
修复模式功能说明:
- 重新加载和应用所有配置
- 保留数据库和用户数据
- 重新生成nginx配置
- 重启后端服务和nginx
- 适用于配置更新、修复nginx问题等场景
使用方法:
bash install.sh --repair
bash install.sh --fix
bash install.sh repair
交互式菜单中添加第3个选项「修复/重新配置」
实现内容:
1. 模式检测: 支持 --repair, --fix, repair 参数
2. 交互式菜单: 添加修复选项到主菜单
3. 主执行流程: 添加repair模式路由到repair_main()
4. repair_main(): 主修复流程函数
- confirm_repair(): 确认修复操作
- repair_check_project(): 检查项目是否已安装
- repair_load_existing_config(): 读取现有.env和nginx配置
- repair_regenerate_nginx_config(): 重新生成nginx配置
- repair_restart_services(): 重启PM2和nginx
- repair_verify_services(): 验证服务状态
- print_repair_completion(): 显示完成信息
修复: 修正了之前提交的语法错误
- 使用sed命令精确修改,避免破坏文件结构
- 通过bash -n语法检查确保无错误
- 保持代码缩进和格式一致性
|
2025-11-11 16:59:34 +08:00 |
|
|
|
91fa2d4fa4
|
功能: 添加修复模式到install.sh
修复模式功能说明:
- 重新加载和应用所有配置
- 保留数据库和用户数据
- 重新生成nginx配置
- 重启后端服务和nginx
- 适用于配置更新、修复nginx问题等场景
使用方法:
bash install.sh --repair
bash install.sh --fix
bash install.sh repair
交互式菜单中添加第3个选项「修复/重新配置」
实现内容:
1. 模式检测: 支持 --repair, --fix, repair 参数
2. 交互式菜单: 添加修复选项到主菜单
3. 主执行流程: 添加repair模式路由到repair_main()
4. repair_main(): 主修复流程函数
- confirm_repair(): 确认修复操作
- repair_check_project(): 检查项目是否已安装
- repair_load_existing_config(): 读取现有.env和nginx配置
- repair_regenerate_nginx_config(): 重新生成nginx配置
- repair_restart_services(): 重启PM2和nginx
- repair_verify_services(): 验证服务状态
- print_repair_completion(): 显示完成信息
|
2025-11-11 16:45:16 +08:00 |
|
|
|
0373e199a2
|
修复: 修复分享链接404错误 - install.sh中的nginx配置错误
## 问题
分享链接访问时报404错误,例如 /s/OjTHZiPg 无法访问
## 原因分析
install.sh中nginx配置有误:
问题:
1. location /s 会匹配 /s 和 /s/xxx
2. 访问 /s/OjTHZiPg 时,nginx会查找文件 frontend/OjTHZiPg/share.html
3. 实际应该代理到后端 /s/:code 路由,让后端重定向到 /share.html?code=xxx
## 修复内容
将 location /s 改为代理到后端:
修复范围:
- HTTP配置(第1196-1200行)
- HTTPS配置(第1269-1273行)
## 部署说明
已部署用户需要:
1. 拉取最新代码
2. 重新运行安装脚本,或手动更新nginx配置
3. 重载nginx: systemctl reload nginx
影响:分享功能将恢复正常
|
2025-11-11 16:31:42 +08:00 |
|
|
|
230937eba8
|
修复: 添加原密码验证UI并修复中文文件名乱码
## 问题1: 修改密码缺少原密码验证UI
后端已有current_password验证,但前端没有输入框:
- 用户无法输入当前密码
- 导致密码修改功能无法正常使用
修复内容(前端):
1. app.html: 添加当前密码输入框
2. app.js:
- 添加current_password字段到data
- 添加current_password必填验证
- 请求体中包含current_password
- 成功后清空current_password
## 问题2: 中文文件名上传后乱码
原因:
- multer默认将文件名从UTF-8转换为Latin1编码
- req.file.originalname获取到的是乱码
修复内容(后端):
1. 配置multer.diskStorage自定义文件名处理
2. 在filename回调中将Latin1转回UTF-8:
Buffer.from(file.originalname, 'latin1').toString('utf8')
3. 在上传路由中同样转换originalname
4. 临时文件名使用时间戳+随机数+原始文件名避免冲突
影响范围:
- 所有文件上传操作
- 中文、日文、韩文等非ASCII文件名
测试建议:
- 上传中文文件名文件(如测试文档.pdf)
- 上传emoji文件名
- 修改密码功能完整流程测试
|
2025-11-11 16:09:49 +08:00 |
|
|
|
9eade3e3e6
|
性能: 优化磁盘信息获取方式,改为异步执行
问题:
- /api/admin/storage-stats 使用 execSync 同步执行 df/wmic 命令
- 同步执行会阻塞事件循环,影响并发请求处理
- 磁盘信息获取可能需要几百毫秒,影响响应速度
优化内容:
1. 导入 util.promisify 将 exec 转换为异步函数
2. 将路由处理函数改为 async
3. 使用 execAsync 替代 execSync 执行 df 命令
4. 使用 execAsync 替代 execSync 执行 wmic 命令
优势:
- 不阻塞事件循环,提升并发性能
- 管理员查看存储统计时不影响其他用户操作
- 更符合 Node.js 最佳实践
|
2025-11-11 15:24:39 +08:00 |
|
|
|
60bc89ffea
|
修复: 修复文件下载时storage连接资源泄漏问题
问题:
- /api/files/download 路由在文件流下载时没有关闭storage连接
- 当下载大文件或多个并发下载时,会导致SFTP连接积累
- 可能导致连接池耗尽和内存泄漏
修复内容:
1. 添加stream.on('error')事件处理:流错误时关闭storage连接
2. 添加stream.on('close')事件处理:流传输完成时关闭storage连接
3. 增强catch块:在stream创建之前发生错误时关闭storage连接
影响范围:
- /api/files/download(用户文件下载)
- /api/share/:code/download-file(分享文件下载,已有处理逻辑)
测试建议:
- 测试正常文件下载
- 测试下载过程中断(用户取消下载)
- 测试下载不存在的文件(错误处理)
- 测试大文件下载和并发下载
|
2025-11-11 15:06:20 +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 |
|
|
|
c9553ff497
|
修复: 添加分享缓存过期机制(TTL)
问题描述:
- 分享文件缓存使用Map没有过期机制
- 缓存会无限增长,占用内存
- 文件更新或删除后缓存不会自动清除
- 长期运行可能导致内存泄漏
修复内容:
1. 实现TTLCache类
- 支持自定义过期时间(默认1小时)
- 自动检查缓存是否过期
- API完全兼容Map(set/get/has/delete)
2. 添加自动清理机制
- 每10分钟自动清理过期缓存
- 记录清理日志便于监控
- 提供destroy方法停止清理定时器
3. 替换shareFileCache为TTLCache实例
- 设置1小时TTL
- 无需修改现有代码
- 向后兼容所有现有使用
缓存特性:
- get()时自动检查过期
- has()时自动检查过期
- 定期清理避免内存积累
- size()方法获取当前缓存数量
影响范围: 分享文件缓存管理
测试建议:
- 验证分享链接访问后缓存生效
- 验证1小时后缓存自动失效
- 监控日志确认定期清理执行
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 14:19:35 +08:00 |
|
|
|
4a9d31806b
|
修复: 优化文件上传临时文件清理机制
问题描述:
- 文件删除操作可能抛出异常导致程序中断
- 服务器崩溃或重启后残留临时文件无法清理
- 没有自动清理机制
修复内容:
1. 添加safeDeleteFile()安全删除函数
- 使用try-catch捕获删除异常
- 记录删除日志和错误信息
- 不会因删除失败而中断主流程
2. 添加cleanupOldTempFiles()定期清理函数
- 启动时自动清理超过24小时的临时文件
- 防止临时文件堆积占用磁盘空间
- 容错处理避免清理失败影响启动
3. 替换所有fs.unlinkSync为safeDeleteFile
- 文件大小超限时的临时文件清理
- 上传成功后的临时文件清理
- 上传失败时的临时文件清理
影响范围: 文件上传功能
测试建议:
- 上传文件后检查uploads目录临时文件已删除
- 重启服务器验证旧临时文件自动清理
- 模拟删除失败场景验证不影响主流程
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 13:46:33 +08:00 |
|
|
|
3359cb8c01
|
安全: 为Cookie添加secure和sameSite安全标志
问题描述:
- Cookie仅设置了httpOnly,缺少其他安全标志
- 未启用secure标志,HTTPS环境下cookie可能被劫持
- 缺少sameSite保护,存在CSRF风险
修复内容:
1. 添加secure标志,从环境变量COOKIE_SECURE控制
- HTTPS环境设置为true
- HTTP环境设置为false
2. 添加sameSite: 'lax'防止CSRF攻击
- lax模式在导航时允许cookie
- 阻止第三方站点的POST请求携带cookie
3. 保留httpOnly: true防止XSS攻击
4. 保留maxAge: 7天的过期时间
配置说明:
- .env中设置 COOKIE_SECURE=true (HTTPS环境)
- .env中设置 COOKIE_SECURE=false (HTTP环境)
影响范围: 用户登录认证cookie安全性
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 13:36:12 +08:00 |
|
|
|
ee555af1a5
|
安全: 优化CORS配置,支持环境变量控制允许的来源
问题描述:
- CORS配置使用origin: true允许所有来源
- 无法限制跨域访问,存在CSRF风险
- 生产环境应该只允许特定域名访问
修复内容:
1. 从环境变量ALLOWED_ORIGINS读取允许的来源列表
2. 支持多个域名配置(逗号分隔)
3. 实现origin验证回调函数
4. 默认允许所有(*),但在生产环境会发出警告
5. 记录并拒绝未授权来源的请求
配置示例:
- 开发环境: ALLOWED_ORIGINS=*
- 生产环境: ALLOWED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com
影响范围: 跨域请求控制
测试建议:
- 配置ALLOWED_ORIGINS后验证只有指定域名可以访问
- 生产环境使用*时应该看到警告日志
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 13:33:38 +08:00 |
|
|
|
9d510afa60
|
安全: 修复密码修改无需验证旧密码的安全漏洞
问题描述:
- 用户修改密码时不需要验证当前密码
- 攻击者获取session后可直接修改密码
- 违反基本的安全最佳实践
修复内容:
1. 添加current_password必填验证
2. 在更新密码前验证当前密码正确性
3. 验证失败返回401错误
4. 更新API文档注释
API变更:
POST /api/user/change-password
请求参数:
- current_password (新增,必填)
- new_password (已有,必填)
影响范围: 用户密码修改功能
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 13:23:18 +08:00 |
|
|
|
a953bda39a
|
安全: 修复JWT密钥使用默认值的安全隐患
问题描述:
- JWT_SECRET使用硬编码默认值,存在严重安全风险
- 生产环境token可被轻易伪造
修复内容:
1. 在auth.js中添加JWT密钥安全检查
- 检测默认密钥并发出警告
- 生产环境强制要求设置JWT_SECRET
2. 更新.env.example添加JWT_SECRET配置说明
- 提供密钥生成方法
- 添加其他安全配置项
3. 优化deploy.sh部署脚本
- 自动生成随机JWT密钥
- 检测并替换默认密钥
影响范围: 安全认证模块
测试建议:
- 启动服务验证JWT_SECRET警告正常显示
- 使用deploy.sh部署验证自动生成密钥
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 13:17:57 +08:00 |
|
|
|
d3b9800e35
|
修复: 分享链接无法访问的问题
- 修复nginx配置中X-Forwarded-Proto使用错误的问题
- 将 $http_x_forwarded_proto 改为 $scheme
- 适配IP直接访问的场景
- 添加client_max_body_size 10G 支持大文件上传
- 增加API代理超时时间配置
- 添加favicon.ico避免404错误
修复后分享链接可以正常访问
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 13:08:52 +08:00 |
|
WanWanYun
|
d604d8bc78
|
功能: 更新脚本增加数据库迁移逻辑
- 新增 update_migrate_database() 函数
- 自动检测旧的100MB上传限制并升级到10GB
- 在更新流程中自动执行数据库迁移
- 确保使用更新脚本时数据库配置也会同步更新
- 修复v1.2.5更新后仍保留旧配置的问题
版本: v1.2.6
|
2025-11-11 02:09:58 +08:00 |
|
WanWanYun
|
b10048ec0a
|
文档: 添加v1.2.5版本更新说明
|
2025-11-11 01:57:42 +08:00 |
|
WanWanYun
|
f097dfd179
|
修复: 将默认上传限制从100MB提升到10GB
- database.js: 修改数据库初始化默认值为10GB (10737418240字节)
- server.js: 修改两处fallback默认值为10GB
- 确保新部署的系统默认支持10GB单文件上传
- 解决用户报告的100MB上传限制问题
版本: v1.2.5
|
2025-11-11 01:57:06 +08:00 |
|
WanWanYun
|
8fa338c933
|
docs: 更新版本历史,添加v1.2.1-v1.2.4的更新说明
|
2025-11-11 01:51:10 +08:00 |
|
WanWanYun
|
77bb2f7bdc
|
修复: 管理员账号密码无法正确设置的问题
- 在 server.js 开头添加 require('dotenv').config()
- 确保环境变量从 .env 文件正确加载
- 修复了安装时设置的管理员账号密码不生效的问题
版本: v1.2.4
|
2025-11-11 01:50:18 +08:00 |
|
WanWanYun
|
b13ae7d0dd
|
工具: 添加数据恢复脚本
功能:
- 自动查找更新时的备份目录
- 显示备份内容和大小
- 恢复数据库、用户文件、配置文件
- 如无备份,提供重新初始化选项
- 自动停止和重启服务
使用场景:
- 更新脚本导致数据丢失时恢复
- 误删数据后恢复
- 从备份恢复系统
使用方法:
curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/restore-data.sh | sudo bash
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 01:08:19 +08:00 |
|
WanWanYun
|
27f130388a
|
🔥紧急修复: 更新脚本导致数据库丢失的严重Bug v1.2.3
问题描述:
- 更新时 cp -r 命令会覆盖整个 backend 目录
- 导致备份的 data、storage、.env 被新的空文件覆盖
- 用户数据、数据库、配置全部丢失
修复内容:
- 改为分别更新 frontend、upload-tool、backend
- 更新 backend 时逐个文件复制,排除 data/storage/.env/node_modules
- 添加数据完整性检测,自动从备份恢复丢失的文件
- 添加详细的恢复提示信息
安全增强:
- 不再使用 cp -r 整个目录覆盖
- 使用 for 循环逐个文件处理
- 每个重要文件都有检测和恢复机制
影响范围:
- install.sh: update_pull_latest_code() 函数
⚠️ 重要: 已使用旧版更新脚本的用户,数据可能丢失!
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-11 01:07:12 +08:00 |
|