feat(api): 修改oss

- 替换开发环境API基础URL为本地服务地址
- 实现签名URL本地缓存机制,解决微信按URL缓存图片导致重复下载问题
- 添加缓存清理功能,包括过期清理和按需删除特定缓存项
- 集成阿里云OSS上传功能,支持直传减少服务器带宽占用
- 优化头像地址处理逻辑,统一使用签名缓存避免地址频繁变化
- 移除过时的OSS上传示例文件oss-upload.js
- 更新课程页面实现跳转第三方小程序功能
- 调整打卡记录图片地址获取方式,统一使用新的签名缓存逻辑
- 优化图片上传流程,增加压缩处理和批量上传支持
- 完善认证模块中的缓存清理逻辑,切换账号时清除相关图片缓存
- 添加后端环境变量配置模板和代理文档说明
This commit is contained in:
王宏豪
2026-10-10 10:27:00 +08:00
parent 3f1a13936d
commit faa114503f
9 changed files with 249 additions and 15 deletions

View File

@@ -64,10 +64,31 @@ def missing_config():
def is_enabled():
"""OSS 是否可用。False 时调用方必须退回本地磁盘,不能抛异常。"""
"""OSS 是否可用。False 时调用方必须退回「明确失败」,不能抛异常。"""
return oss2 is not None and not missing_config()
def unavailable_reason():
"""返回「OSS 不可用」的可读原因;可用时返回空串。
**为什么要单独一个函数**:`is_enabled()` 把两种完全不同的故障揉成同一个 `False` ——
① **没装 oss2**(`pip install -r requirements.txt` 没在这个 venv 里跑过)
② **没配 .env**(部署时 `.env` 没带上 / 被 `git pull` 覆盖 / 值还是占位符)
而这两种的修法毫无关系:一个是装包,一个是配环境变量。
线上表现却**完全一样**(上传 503 + 图片全空白),而且**一句话日志都没有** ——
2026-10-09 就因为这个把排查方向带到错的地方去了。
所以:启动时把它的返回值打进日志(见 `main.py`),排查时先问它。
"""
if oss2 is None:
return "未安装 oss2(用该 venv 的解释器跑 pip install -r requirements.txt)"
missing = missing_config()
if missing:
return "缺少或仍是占位值的配置项:" + " / ".join(missing)
return ""
_buckets = {}