|
|
@@ -417,7 +417,14 @@ Run: `... -Dtest=LsyOnboardingServiceTest`
|
|
|
- Consumes: Task 2 的 `postMultipart`
|
|
|
- Produces: `public String uploadImage(byte[] bytes, String fileName)` → 返回 `img_url`
|
|
|
|
|
|
-**上游契约**(page 196236572):见 Task 2 的表。返回 `img_url`。
|
|
|
+**上游契约**(page 196236572):见 Task 2 的表。**接口 URL:`/api/info/upload/img`** ——
|
|
|
+文档原写 `https://test.gdyfsk.com/yfpay/api/info/upload/img`,基址由 `props.getBaseUrl()` 提供,
|
|
|
+代码里只传路径这一段(与 `post` / `postApi` / `postMultipart` 的既有约定一致)。返回 `img_url`。
|
|
|
+
|
|
|
+> ⚠ **2026-09-22 补漏**:本节原先**没有写这个路径**,全文只出现在 Task 2 的表和联调清单第 7 项里。
|
|
|
+> Task 6 的 brief 是从本文件抽取的 ⇒ 实施者会拿不到该传什么 path,只能猜或去翻上游文档。
|
|
|
+> 预检扫描把 T6 记为「自洽」是**错的**:那一格只核了「变异表 ↔ 测试表」,没核「本 task 是否自带
|
|
|
+> 它要用的常量」。已就地补上。
|
|
|
|
|
|
- [ ] **Step 1: 写失败的测试**
|
|
|
|
|
|
@@ -443,7 +450,11 @@ Run: `... -Dtest=LsyOnboardingServiceTest`
|
|
|
- **不要**把它加进 `validate()`:`validate()` 只管「缺了就静默失败」的项(见它自己的 javadoc),一个带合理默认值的上限不属于那类。`LeshouyingPropertiesTest` 补一条断言它不在必填列表里(**正对照**:确证 `validate()` 在有默认值时不炸)。
|
|
|
- 扩展名白名单:`jpg` / `jpeg` / `png` / `bmp`,取自文档示例出现的形态;**常量 + javadoc**说明依据是「上游字段名全是『照片』语义 + 文档示例是 `.jpg`」,这是我们收窄的,不是上游列举的。
|
|
|
- 文件名含 `/`、`\`、`..` ⇒ 400(**不是**「清洗后照发」:清洗会让日志里的名字与实际发出去的名字不一致,排障时会骗人)。
|
|
|
-- 复用 Task 2 的 `postMultipart`,`fileFieldName = "img_file"`。
|
|
|
+- 复用 Task 2 的 `postMultipart`:`path = "/api/info/upload/img"`、`fileFieldName = "img_file"`。
|
|
|
+- `img_name` 这个**字符串部件**与文件部件上的 filename 都从**同一个形参** `fileName` 派生。
|
|
|
+ 依据:文档把 `img_name` 列为**必填字符串部件**、示例值 `8510_pic_idcard.jpg` 与文件名同形。
|
|
|
+ **文档没有规定二者必须一致** —— 所以这是我们的收窄,理由是不给调用方两个可能写出不一致值的入口;
|
|
|
+ 真不一致时上游的行为我们不知道(未实测)。不要把这条写成「上游要求一致」。
|
|
|
|
|
|
- [ ] **Step 4: 跑测试确认绿**
|
|
|
|