fix: 固定开发环境后端数据目录,避免 cwd 不同导致头像 404
从 cwd 向上解析 backend 根,并写入本地开发启动约定。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -283,6 +283,7 @@
|
||||
|
||||
- **全站图片策略:用户上传的图片统一 WebP**。头像裁剪/转码在浏览器端完成(Canvas → toBlob('image/webp')),后端只收 WebP
|
||||
- 存储:`backend/data/uploads/avatars/{随机hex32}.webp`(已在 backend/data/ gitignore 内),Gin `r.Static("/uploads", ...)` 提供静态服务;Next rewrite 新增 `/uploads/:path*` 同源代理到后端(与 /api 一样走 BACKEND_URL 兜底 localhost:3001)
|
||||
- **本地开发数据目录铁律(2026-09-16)**:`config.Parse` 从 cwd 向上解析 backend 根,不跟 `os.Getwd()` 走。规范启动 `cd backend && go run ./cmd/jiang13`;数据只有 `backend/data/`。在 `cmd/jiang13/` 启动会写出另一套 `cmd/jiang13/data`,DB 里头像 404。规则见 `.cursor/rules/jiang13-bbs-local-dev.mdc`;可用 `JIANG13_WORK_PATH` 覆盖。启动日志打印 `workPath`/`dataDir`。`:3001` 已占用则不要再开第二个后端
|
||||
- DB:`attachments` 表(user_id+kind 联合索引,kind 取值 `avatar`/`image`,记录 url/mime/size/width/height);`service/upload.go` 校验 RIFF/WEBP 魔数 + `golang.org/x/image/webp` 解码尺寸(正方形 64~512px)+ **大小限制以裁剪后文件为准(≤2MiB,MaxBytesReader 限请求体)**,落盘与 user.avatar 更新在同一事务
|
||||
- 路由(需登录 + CSRF):`POST /api/upload/avatar`(multipart 字段 file)、`PUT /api/avatar/use`(只能选用本人 attachments 中的 url)、`GET /api/my/media`(本人全部附件,id DESC 限 60 条)、`DELETE /api/my/attachments/:id`(被帖子 content 引用返回 409;是当前头像则事务内置空 user.avatar;成功后物理删除文件)
|
||||
- **头像只能走上传/媒体库选用通道**:`UpdateProfile` 已移除 avatar 字段,禁止通过资料接口写任意外链 URL
|
||||
|
||||
@@ -26,4 +26,4 @@ alwaysApply: true
|
||||
|
||||
- remote:`https://git.iioio.com/freefire/jiang13-bbs.git`,分支 `main`
|
||||
- 自建 Gitea 偶发不稳:`git push` 失败则**原样重试一次**;勿改 remote / 勿反复重试
|
||||
- 勿提交 `node_modules`、`.next`、`backend/cmd/jiang13/data`(含 `.jwt_secret`)、真实 `app.ini`
|
||||
- 勿提交 `node_modules`、`.next`、`backend/data`、`backend/cmd/jiang13/data`(错误 cwd 遗留)、真实 `app.ini`
|
||||
|
||||
@@ -22,6 +22,7 @@ alwaysApply: true
|
||||
- Avatar 所有调用必须 `src={xxx.avatar || undefined}`
|
||||
- CSRF cookie 是 URLEncoding(含 `=`),解析勿用 `split('=')[1]`
|
||||
- PowerShell 5.1 中文脚本需 UTF-8 BOM;npx/npm 用 `npx.cmd`/`npm.cmd`
|
||||
- 后端必须 `cd backend && go run ./cmd/jiang13`;cwd 错了会把头像写到 `cmd/jiang13/data`,规范目录只有 `backend/data`(详见 `jiang13-bbs-local-dev`)
|
||||
|
||||
## 用户偏好(自 Trae user_profile)
|
||||
|
||||
|
||||
35
.cursor/rules/jiang13-bbs-local-dev.mdc
Normal file
35
.cursor/rules/jiang13-bbs-local-dev.mdc
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
description: 本地开发启动约定:后端工作目录、唯一数据目录、单实例,避免头像/上传 404
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# 本地开发环境
|
||||
|
||||
## 后端启动(必须遵守)
|
||||
|
||||
规范命令与 `start.bat` / `start.sh` 一致:
|
||||
|
||||
```
|
||||
cd backend
|
||||
go run ./cmd/jiang13
|
||||
```
|
||||
|
||||
- 数据目录**只有** `backend/data/`(头像在 `backend/data/uploads/avatars/`)
|
||||
- 配置文件是 `backend/app.ini`,不是仓库根、也不是 `cmd/jiang13/`
|
||||
- **禁止**在仓库根、`backend/cmd/jiang13/` 或其他目录执行 `go run`(会另建一套 data,DB 里头像 URL 对不上文件)
|
||||
- **禁止**同时跑两个后端。启动前若 `:3001` 已在听,沿用现有进程,或先停再启;不要再开一个
|
||||
- 启动日志必须含 `workPath=.../backend` 且 `dataDir=.../backend/data`。若不是,立刻停掉重来
|
||||
- 覆盖工作目录只用环境变量 `JIANG13_WORK_PATH`(指向 `backend/`)
|
||||
|
||||
## 前端
|
||||
|
||||
```
|
||||
cd frontend
|
||||
npm.cmd run dev
|
||||
```
|
||||
|
||||
`:3000` 把 `/uploads` rewrite 到 `:3001`。头像 404 先查后端 `dataDir`,不要改前端。
|
||||
|
||||
## 遗留目录
|
||||
|
||||
`backend/cmd/jiang13/data/` 是错误 cwd 的产物,禁止当数据源。发现后把 `uploads/` 合并进 `backend/data/uploads/`,再删遗留目录。
|
||||
Reference in New Issue
Block a user