feat(api): 重构图片地址管理与上传机制
- 替换开发环境API基础URL为本地服务地址 - 实现签名URL本地缓存机制,解决微信按URL缓存图片导致重复下载问题 - 添加缓存清理功能,包括过期清理和按需删除特定缓存项 - 集成阿里云OSS上传功能,支持直传减少服务器带宽占用 - 优化头像地址处理逻辑,统一使用签名缓存避免地址频繁变化 - 移除过时的OSS上传示例文件oss-upload.js - 更新课程页面实现跳转第三方小程序功能 - 调整打卡记录图片地址获取方式,统一使用新的签名缓存逻辑 - 优化图片上传流程,增加压缩处理和批量上传支持 - 完善认证模块中的缓存清理逻辑,切换账号时清除相关图片缓存 - 添加后端环境变量配置模板和代理文档说明
This commit is contained in:
30
config.py
30
config.py
@@ -32,9 +32,31 @@ H5_BASE_URL = _env("H5_BASE_URL", "http://127.0.0.1:8001").rstrip("/")
|
||||
|
||||
FEEDBACK_DIR = _env("FEEDBACK_DIR", "/home/introduction/feedback")
|
||||
COURSE_VOTES_FILE = _env("COURSE_VOTES_FILE", "/home/introduction/test/course_votes.json")
|
||||
PLAN_ATTACH_DIR = _env("PLAN_ATTACH_DIR", "/home/static/plan")
|
||||
|
||||
# nginx 静态资源根目录:HEAD/登录后图片统一由 nginx 直接读取
|
||||
STATIC_ROOT = _env("STATIC_ROOT", "/home/static").rstrip("/")
|
||||
AVATAR_DIR = _env("AVATAR_DIR", "/home/static/avatars").rstrip("/")
|
||||
# ── 阿里云 OSS:打卡附件 / 头像的对象存储(2026-09-22 新增)─────────────
|
||||
# **图片的唯一存储**。2026-09-22 收口后已无本地磁盘兜底:`PLAN_ATTACH_DIR` /
|
||||
# `AVATAR_DIR` / `STATIC_ROOT` 三个磁盘路径配置项随磁盘读路径一起删掉了。
|
||||
# 未配置时 oss_store.is_enabled() 为 False:上传接口返回 503、读接口的
|
||||
# attachment_urls 全为空串(前端干脆不显示图),**不会**退化成读写磁盘。
|
||||
# 注意反馈模块(FEEDBACK_DIR)的截图仍走磁盘,它不在本次 OSS 化范围内。
|
||||
# AK/SK 只从环境变量取,**不写进仓库**(.env 历史上有被 git 跟踪过,务必配 .gitignore)。
|
||||
OSS_ACCESS_KEY_ID = _env("OSS_ACCESS_KEY_ID")
|
||||
OSS_ACCESS_KEY_SECRET = _env("OSS_ACCESS_KEY_SECRET")
|
||||
OSS_ENDPOINT = _env("OSS_ENDPOINT", "oss-cn-shanghai.aliyuncs.com")
|
||||
OSS_BUCKET = _env("OSS_BUCKET", "mingyuan-oss")
|
||||
# 绑了自定义域名就填这里(例:https://oss.muguaclub.cn)。
|
||||
# 为什么必要:小程序 <image> 只能加载「downloadFile 合法域名」里的域名,
|
||||
# *.aliyuncs.com 加不进白名单;且 OSS 默认域名访问图片会强制下载、浏览器无法直接预览。
|
||||
# 签名 URL 会用这个 host 计算签名(V4 的签名包含 Host),所以它必须和实际访问的域名一致。
|
||||
OSS_PUBLIC_ENDPOINT = _env("OSS_PUBLIC_ENDPOINT")
|
||||
# 签名 URL 有效期(秒)。OSS 硬上限 604800(7 天),超了报 0002-00000232。
|
||||
# 默认 5 天(432000):小程序端会把这个 URL 缓存在本地,**URL 稳定**才能让微信
|
||||
# `<image>` 的「按 URL 缓存图片」命中 —— 后端每次现签的话 Expires 每次都不同,
|
||||
# 微信会当作新图**反复重新下载整个文件**。
|
||||
# ⚠️ 代价是泄漏窗口变长:拿到 URL 的人在有效期内都能看图,而这个桶里是学员打卡照。
|
||||
# 若敏感度优先于省流量,把它调小即可 —— 前端缓存会随签名有效期自然失效,不必改代码。
|
||||
OSS_URL_EXPIRE = int(_env("OSS_URL_EXPIRE", "432000"))
|
||||
# PostObject 表单直传签名的有效期(秒)。默认 10 分钟 —— 从「取到签名」到「传完」
|
||||
# 通常只要几秒,窗口开太长等于把可写时间放大。
|
||||
OSS_POST_EXPIRE = int(_env("OSS_POST_EXPIRE", "600"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user