# 0.7.8:本科、研究生可选导入HTML邮件附件 本次更新沿用你已部署的反馈服务及 `diagnostic_html` 文件字段,新增研究生课表/考试结构兼容,本科继续可用。客户端默认关闭,需要学生在“反馈与共建→反馈问题和建议”勾选日志、“附带最近一次学校导入页面HTML”并同意提示;邮件除日志外另附 `TPSchedule-school-page.html`,不占3个图片/视频名额。更新的是Compose服务`feedback`,与独立更新管理后台的`updates`服务不同。 ## 你需要在1Panel执行的更新 1. 下载并解压 `TPSchedule-feedback-server-0.7.8.zip`,找到其中 `feedback/feedback_service.py` 和 `feedback/Dockerfile`,覆盖服务器原部署目录中的同名文件,例如 `/opt/app-feedback/`。Dockerfile增加普通用户所需的明确读取权限,避免上传/解压后文件为600导致无法启动。不要覆盖服务器 `.env`,保留原 SMTP 密码、`IDEMPOTENCY_SECRET` 和数据库数据卷。 2. 在1Panel的 `app.glowtps.cn` 站点配置中,把原 `client_max_body_size 21m;` 改成 `client_max_body_size 24m;`,验证并重载OpenResty配置。雷池该站点如果有请求体大小限制,也提高到至少24MiB(若单位为字节则25165824)。原域名、证书、80/443→10080→18080转发不变。 3. 在原目录执行: ```sh cd /opt/app-feedback docker compose up -d --build --force-recreate feedback docker compose ps curl --fail --max-time 10 http://127.0.0.1:18080/healthz ``` 健康检查返回 `{"status":"ok"}` 后再测试APP。不要删除数据卷,不要另建新的Compose项目。 4. 同学覆盖安装0.7.8:本科在学校网页中打开课表并点击一次“导入当前课表”;研究生在APP中选学期后等待自动读取,手动“读取当前页面”也支持。失败后返回“我的→反馈与共建”,在10分钟内写明错误并勾选日志、HTML,确认后提交。两类学生的考试读取失败同样保留最后一次捕获的考试表格。没有捕获到可识别学校表格时会提示返回学校页面重试,不发送登录整页。到 `tps-david@glowtps.cn` 核对两个附件;此步骤会真实发送邮件,由你操作。 ## 数据与兼容性 - 本科HTML只含课表/课程名单或考试表格、学期/考试类型数字,以及解析需要的课程字面量脚本;研究生只含课表/考试表格、受限节次ID及对应学期选择信息,保留排查需要的解析结构。移除学校页面账户头部、其他表单、链接地址、事件处理和无关脚本,不采集Cookie。附件中的课程脚本不执行,页面附带禁止网络请求的CSP。 - 课程、教师、教室、考场及可能存在的个人信息用于排查,仍应按个人资料妥善处理。HTML不是原始整页的逐字备份。 - 未提交的采集缓存仅在APP内存保留最多10分钟;退出学校登录、重新认证或开始新的导入会清除。勾选后实际提交时冻结附件,失败重试沿用同一编号和字节;重试表单关闭或APP结束后该冻结副本释放。 - HTML最多2MiB,日志256KiB,媒体仍最多3个、每个8MiB、合计20MiB。总HTTP请求上限为20MiB+256KiB+2MiB+64KiB;代理放行24MiB。 - 旧客户端不带新字段仍可使用,旧本科HTML继续接受。仅更新APP而不更新反馈服务时,研究生附件可能被旧服务拒绝;应先更新服务,取消HTML后仍可只发日志。 - 本工程只准备并测试代码,没有登录你的服务器、改配置或发送真实邮件。