فهرست منبع

docs(env): 查清 /data/dms/dms_upload/yszs 的真实形态——不是 URL,且当前为空

用户要求「分析可能情况、自己去查哪种有数据」。全部探测都真跑过:

URL 形态:全 404
- 192.168.2.23:8000 上 7 种路径形态 → 全部 404,响应体固定 9 字节 "Not Found";
  连 /openapi.json、/docs 也是 404 —— 该服务**不提供任何静态文件**,是纯 API 服务
- 121.43.55.7:10081 上 /data/...、/dms_upload/... → 649 字节 Tomcat 404;
  /dms/dms_upload/... → 150 字节 Spring JSON 404(说明请求进了 DMS 应用但无此路由)
- 拿真实会话 id(用户测试留下的 a2fdfbc2-…)当文件名探 → 仍全 404
- 聊天后端原始 SSE 里找路径线索 → 无
- 两台机器**不是同一台**(192.168.2.23 只开 8000;121.43.55.7 只开 10081)

✅ 能取到数据的途径:DMS 的 POST /dms/file/getFiles
- 参数只有 path(form body),且**相对 Tomcat 工作目录**;传绝对路径不报错但永远取不到
  (返回「当前文件不是文件夹,无子文件」)—— 本轮最容易踩的一点
- 换算实测:. = Tomcat bin;.. = Tomcat 根;../.. = /usr/local;../../../.. = /;
  ../../../../data/dms/dms_upload 才是目标
- **yszs 目录存在但为空**(返回无 content 字段):同级 photo 7027 项、file 6324 项、
  video 3 项、other 1 项
- getFiles 只能列目录,**读不了文件内容**

结论:该目录是 DMS 上新建的、当前没有数据;它**不是 URL**,前端拼不出地址。
Session 032 里我写的「完整地址 = {后端地址}{路径}」是错的,已删除。

改动:
- 四份 .env 的注释改为如实描述(不是 URL / 怎么读 / 相对路径 / 当前为空)
- reference/DMS_API.md 新增 §8「浏览服务器文件目录」(参数、换算表、返回形态、目录布局)
- architecture.md 的变量说明同步更正

验证:探测均有原始响应为证;npm run build 通过;validate-harness 通过。

Co-Authored-By: Claude Code <noreply@anthropic.com>
gongtianxiao 3 روز پیش
والد
کامیت
7ce6ed3cbc
7فایلهای تغییر یافته به همراه144 افزوده شده و 10 حذف شده
  1. 6 3
      .env.development
  2. 6 2
      .env.production
  3. 6 2
      .env.qingpu
  4. 6 2
      .env.test
  5. 1 1
      harness/docs/architecture.md
  6. 59 0
      harness/docs/reference/DMS_API.md
  7. 60 0
      harness/progress.md

+ 6 - 3
.env.development

@@ -41,9 +41,12 @@ VITE_CHAT_API="/chat-api"
 # 聊天后端真实地址。dev 走同源代理(VITE_CHAT_API 是代理前缀,见 vite.config.ts),
 # 代理的 target 从**这个变量**读,不再硬编码在 vite.config.ts 里
 VITE_CHAT_TARGET="http://192.168.2.23:8000"
-# 后端存放「会话信息 JSON」的目录。
-# 完整地址 = {VITE_CHAT_TARGET}{VITE_CHAT_SESSION_JSON_DIR}(生产则接在 VITE_CHAT_API 之后)
-# ⚠️ 目前仅作约定记录,前端尚无消费方;等对接会话 JSON 时从这里取,不要再写死
+# DMS 服务器上「营商助手」专用的文件目录(绝对路径)。
+# ⚠️ 实测(2026-09-17):**它不是 URL** —— 两台机器上按 URL 访问全部 404
+#    (192.168.2.23:8000 不提供任何静态文件;121.43.55.7:10081 返回 Tomcat 404)。
+#    能取到数据的途径是 DMS 接口 POST /dms/file/getFiles(参数 path),
+#    且 path 是**相对 Tomcat 工作目录**的,要写成 ../../../../data/dms/dms_upload/yszs
+# ⚠️ 该目录**目前为空**(同级 photo 有 7027 项、file 6324 项、video 3 项,yszs 无内容)
 VITE_CHAT_SESSION_JSON_DIR="/data/dms/dms_upload/yszs"
 
 # DMS 数据管理服务(会话/问答记录/反馈的落地库)

+ 6 - 2
.env.production

@@ -15,6 +15,10 @@ VITE_USE_KNOWLEDGE_API=true
 # 生产部署时请改为实际后端地址(当前为内网测试地址)
 VITE_CHAT_API="http://192.168.2.23:8000"
 
-# 后端存放「会话信息 JSON」的目录(完整地址接在 VITE_CHAT_API 之后)
-# ⚠️ 目前仅作约定记录,前端尚无消费方
+# DMS 服务器上「营商助手」专用的文件目录(绝对路径)。
+# ⚠️ 实测(2026-09-17):**它不是 URL** —— 两台机器上按 URL 访问全部 404
+#    (192.168.2.23:8000 不提供任何静态文件;121.43.55.7:10081 返回 Tomcat 404)。
+#    能取到数据的途径是 DMS 接口 POST /dms/file/getFiles(参数 path),
+#    且 path 是**相对 Tomcat 工作目录**的,要写成 ../../../../data/dms/dms_upload/yszs
+# ⚠️ 该目录**目前为空**(同级 photo 有 7027 项、file 6324 项、video 3 项,yszs 无内容)
 VITE_CHAT_SESSION_JSON_DIR="/data/dms/dms_upload/yszs"

+ 6 - 2
.env.qingpu

@@ -15,7 +15,11 @@ VITE_USE_KNOWLEDGE_API=true
 VITE_ASSISTANT_STATISTICS_BASE_URL=https://qingpu-data-api.metamaker.cn/
 VITE_CHAT_API="http://192.168.2.23:8000"
 
-# 后端存放「会话信息 JSON」的目录(完整地址接在 VITE_CHAT_API 之后)
-# ⚠️ 目前仅作约定记录,前端尚无消费方
+# DMS 服务器上「营商助手」专用的文件目录(绝对路径)。
+# ⚠️ 实测(2026-09-17):**它不是 URL** —— 两台机器上按 URL 访问全部 404
+#    (192.168.2.23:8000 不提供任何静态文件;121.43.55.7:10081 返回 Tomcat 404)。
+#    能取到数据的途径是 DMS 接口 POST /dms/file/getFiles(参数 path),
+#    且 path 是**相对 Tomcat 工作目录**的,要写成 ../../../../data/dms/dms_upload/yszs
+# ⚠️ 该目录**目前为空**(同级 photo 有 7027 项、file 6324 项、video 3 项,yszs 无内容)
 VITE_CHAT_SESSION_JSON_DIR="/data/dms/dms_upload/yszs"
 VITE_REDIRECT_MAP={"demo":"https://demo.heijingai.com/FTA-c2p/%23/overview","zhaoshang":"https://demo.heijingai.com/policy-application/%23/"}

+ 6 - 2
.env.test

@@ -12,6 +12,10 @@ VITE_POLICY_LOCAL_FIRST="false"
 # 新版聊天协议后端(POST /api/chat,SSE),直连模式
 VITE_CHAT_API="http://192.168.2.23:8000"
 
-# 后端存放「会话信息 JSON」的目录(完整地址接在 VITE_CHAT_API 之后)
-# ⚠️ 目前仅作约定记录,前端尚无消费方
+# DMS 服务器上「营商助手」专用的文件目录(绝对路径)。
+# ⚠️ 实测(2026-09-17):**它不是 URL** —— 两台机器上按 URL 访问全部 404
+#    (192.168.2.23:8000 不提供任何静态文件;121.43.55.7:10081 返回 Tomcat 404)。
+#    能取到数据的途径是 DMS 接口 POST /dms/file/getFiles(参数 path),
+#    且 path 是**相对 Tomcat 工作目录**的,要写成 ../../../../data/dms/dms_upload/yszs
+# ⚠️ 该目录**目前为空**(同级 photo 有 7027 项、file 6324 项、video 3 项,yszs 无内容)
 VITE_CHAT_SESSION_JSON_DIR="/data/dms/dms_upload/yszs"

+ 1 - 1
harness/docs/architecture.md

@@ -108,7 +108,7 @@ src/
 | `VITE_API` | 主业务 API 网关 |
 | `VITE_CHAT_API` | 对话接口。服务前缀(`/chat-api`、`http://host:8000`)会自动追加 `/api/chat`;已是完整地址则原样使用 |
 | `VITE_CHAT_TARGET` | **聊天后端真实地址**(仅 dev 用)。`VITE_CHAT_API` 在开发环境是代理前缀 `/chat-api`,代理的 target 从本变量读(见 `vite.config.ts`),**不再硬编码在配置文件里** |
-| `VITE_CHAT_SESSION_JSON_DIR` | 后端存放「**会话信息 JSON**」的目录(当前 `http://192.168.2.23:8000` 上的 `/data/dms/dms_upload/yszs`)。完整地址 = `{后端地址}{该路径}`。⚠️ 目前**仅作约定记录,前端尚无消费方**;将来对接时从这里取,别再写死 |
+| `VITE_CHAT_SESSION_JSON_DIR` | **DMS 服务器上**「营商助手」专用文件目录 `/data/dms/dms_upload/yszs`。⚠️ 实测(2026-09-17):**它不是 URL**(两台机器按 URL 访问全 404),前端拼不出地址;读取只能走 DMS 的 `POST /dms/file/getFiles`(相对 Tomcat 工作目录的路径,见 `reference/DMS_API.md` §8)。该目录**目前为空**。前端**尚无消费方** |
 | `VITE_DMS_API` / `VITE_DMS_TARGET` | DMS 数据服务(会话/问答记录/反馈落地)。dev 走 `/dms-api` 代理、token 由代理注入,见 `vite.config.ts` |
 | `VITE_MODEL_SERVER` | 模型服务 |
 | `VITE_ASR` / `VITE_STREAM_SERVER` | 语音识别 / 流媒体 |

+ 59 - 0
harness/docs/reference/DMS_API.md

@@ -477,3 +477,62 @@ curl -s -X POST "http://${DMS_HOST}/dms/content/selectContentList" \
 | [`apifox-dms.md`](F:/yysk/AI_zhaoshang/DMS_Data_Migration/2.%20DMS-Manage/cursor-skill-dms/apifox-dms.md) | Apifox 干净版 |
 | [`DMS_MAPPING.md`](DMS_MAPPING.md) | 本项目表→栏目映射 + 踩坑记录 |
 | [`RUNBOOK.md`](F:/yysk/AI_zhaoshang/DMS_Data_Migration/harness/docs/RUNBOOK.md) | 操作手册 |
+
+---
+
+## 8. 浏览服务器文件目录:`POST /file/getFiles` ✅
+
+**用途**:列服务器上某个目录的内容。查「后端把文件存哪了」时用它 ——
+**这些路径不是 URL,用浏览器/curl 直接访问一律 404**(实测)。
+
+### 8.1 参数只有一个:`path`(form body)
+
+```bash
+curl -s -X POST "http://121.43.55.7:10081/dms/file/getFiles"   -H "token: ${DMS_TOKEN}"   --data-urlencode "path=../../../../data/dms/dms_upload/yszs"
+```
+
+> ⚠️ **`path` 是相对 DMS 进程工作目录(Tomcat 的 bin)的**,不是文件系统绝对路径。
+> 传绝对路径(`/data/...`)不会报错,但会返回「当前文件不是文件夹,无子文件」——
+> 因为那是相对拼接后并不存在的路径。**这是最容易踩的一点。**
+
+### 8.2 相对路径换算(实测)
+
+| 想要的位置 | 写成 |
+|---|---|
+| Tomcat bin(工作目录) | `.` |
+| Tomcat 根(有 `webapps*`、`conf`、`logs`、`uploads`…) | `..` |
+| `/usr/local` | `../..` |
+| `/`(根) | `../../../..` |
+| `/data` | `../../../../data` |
+| **`/data/dms/dms_upload`** | `../../../../data/dms/dms_upload` |
+| `/data/dms/dms_upload/yszs` | `../../../../data/dms/dms_upload/yszs` |
+
+### 8.3 返回形态
+
+```json
+{"code":200,"message":"成功!","content":["../webapps_dms","../logs", ...]}
+```
+
+| 情况 | 返回 |
+|---|---|
+| 目录**有**内容 | `content` 是数组,元素是「带前缀的相对路径」 |
+| 目录**为空** | **没有 `content` 字段**(只有 `code`/`message`)—— 别把「字段缺失」当成出错 |
+| 传的是**文件**路径 | `content: ["当前文件不是文件夹,无子文件"]`(说明它只能列目录,**读不了文件内容**) |
+| 参数名写错(`dir`/`directory`/`filePath`…) | HTTP 500 |
+
+### 8.4 实测到的目录布局(2026-09-17)
+
+```
+/data/dms/
+├── dms_upload/          ← DMS 上传根目录
+│   ├── photo/    7027 项
+│   ├── file/     6324 项
+│   ├── video/       3 项
+│   ├── other/       1 项
+│   ├── yszs/        **空**(营商助手专用,新建未写入)
+│   └── *.json    7 个 uuid 命名的 json
+└── down_files/
+```
+
+> 📌 结论:`/data/dms/dms_upload/yszs` 是**DMS 服务器上的真实目录**,
+> 目前**没有数据**;它既不是 URL,也不能通过 `getFiles` 读文件内容(只能列目录)。

+ 60 - 0
harness/progress.md

@@ -28,6 +28,66 @@
 
 ## 会话记录
 
+## Session 033
+
+- **日期**:2026-09-17
+- **本轮目标**:用户要我看清 `/data/dms/dms_upload/yszs` 到底**哪种形态有数据**
+  (承接 Session 032 我按字面把 URL 假设写进 env 的那处不确定)
+- **实测结论:没有任何 URL 形态有数据;能取到数据的接口里,该目录是空的**
+
+### 探过的东西(都是真跑的)
+
+| 探测 | 结果 |
+|---|---|
+| `192.168.2.23:8000` 上 `/data/dms/dms_upload/yszs/`、`/dms_upload/yszs/`、`/dms/dms_upload/yszs/` 等 7 种路径 | **全部 404**,响应体固定 9 字节 `Not Found` |
+| 同主机的 `/openapi.json`、`/docs`、`/redoc` | 也全是 404 —— **该服务不提供任何静态文件**,是纯 API 服务 |
+| `121.43.55.7:10081` 上 `/data/...`、`/dms_upload/...` | 404(649 字节,**Tomcat** 默认错误页) |
+| 同主机 `/dms/dms_upload/...` | 404(150 字节,**Spring** 的 JSON —— 说明这些请求确实进了 DMS 应用,但没有对应路由) |
+| 拿**真实会话 id**(你测试留下的 `a2fdfbc2-…`)当文件名去探 | 仍全 404 |
+| 聊天后端原始 SSE 里找路径/文件线索 | 无任何线索(不含路径字段) |
+| **两个 IP 是否同一台机器** | **不是**:`192.168.2.23` 只开 8000,`121.43.55.7` 只开 10081 |
+
+### ✅ 真正能取到数据的方式:DMS 的 `POST /dms/file/getFiles`
+
+- 参数只有 `path`(form body),**且是相对 DMS 进程工作目录(Tomcat 的 bin)**的
+- ⚠️ **传绝对路径不报错但永远取不到**(会返回「当前文件不是文件夹,无子文件」)——
+  因为它是相对拼接的。**这是这轮最容易踩的一点**
+- 换算实测:`.` = Tomcat bin;`..` = Tomcat 根(含 `webapps_dms`、`logs`、`uploads`);
+  `../..` = `/usr/local`;`../../../..` = `/`;`../../../../data/dms/dms_upload` 才是目标
+- **`/data/dms/dms_upload/yszs` 存在,但返回里没有 `content` 字段 = 目录为空**
+  (对比:同级 `photo` **7027** 项、`file` **6324** 项、`video` 3 项、`other` 1 项)
+- `getFiles` **只能列目录、读不了文件内容**(把文件路径传进去 → 「当前文件不是文件夹,无子文件」)
+
+### 结论
+
+`/data/dms/dms_upload/yszs` 是 **DMS 服务器上新建的目录,目前没有数据**;
+它**不是 URL**(Session 032 我那句「完整地址 = {后端地址}{路径}」是错的),
+前端也拼不出来。要读它只能走 DMS 接口,且目前**没有读文件内容的接口**。
+
+### 已完成
+
+- **修正 `.env.*` 的注释**(4 份):如实写明「不是 URL、实测全 404、读取要走 getFiles、
+  相对路径怎么写、目录当前为空」,并**删掉那句错误的「完整地址 = …」**
+- **`docs/reference/DMS_API.md` 新增 §8「浏览服务器文件目录」**:参数、相对路径换算表、
+  返回形态(空目录没有 `content` 字段 / 传文件路径会怎样 / 参数名写错会 500)、
+  实测到的目录布局
+- `docs/architecture.md` 里该变量的说明同步为「服务器目录,不是 URL」
+
+- **运行过的验证**:上述探测全部有原始响应为证;`npm run build` 通过;
+  `validate-harness` 通过
+- **已记录证据**:本文件 Session 033;`docs/reference/DMS_API.md` §8;四份 env 的注释
+- **更新过的文件或工件**:`.env.development`、`.env.production`、`.env.qingpu`、`.env.test`、
+  `harness/docs/reference/DMS_API.md`、`harness/docs/architecture.md`、根 `README.md`、本文件
+- **已知风险或未解决问题**:
+  - ⚠️ **该目录为空**:如果预期它现在就该有会话 JSON,那是**后端还没往里写**
+    (或写到了别处 —— `dms_upload/` 根下确实有 7 个 uuid 命名的 `.json`,
+    但我**没有读文件内容的接口**,无法确认它们是不是会话 JSON)
+  - ⚠️ 用户说的后端是 `192.168.2.23:8000`,而该路径在 `121.43.55.7` 上(**两台机器**)——
+    若后端要写这个目录,是跨机器写(可能经 DMS 的文件接口),这点需用户/后端确认
+  - ⚠️ 相对路径依赖 Tomcat 工作目录的位置,**Tomcat 挪目录就会失效**
+- **下一步最佳动作**:请用户确认两件事 ——①后端是否已经开始往这个目录写会话 JSON;
+  ②如果已有文件而我看不到,请给一个**文件名/完整示例**,我按它验证读取路径
+
 ## Session 032
 
 - **日期**:2026-09-17