rwadurian/backend
hailin c37c85838b fix(android): 增强备份导出验证 - 添加 0 字节检查和显式流创建检查 [CRITICAL]
【数据完整性加固 - 三层防护】

## 问题背景

虽然前一版本已添加完整性验证,但存在两个可能导致误报成功的边缘情况:1. 流创建失败但未明确检测
2. 文件写入 0 字节但未专门检查

## 修复内容

### 1. 显式流创建检查```kotlin// 修复前(Elvis 运算符隐式检查,可读性差)
context.contentResolver.openOutputStream(uri)?.use { ... } ?: throw Exception(...)

// 修复后(显式检查,逻辑清晰)
val outputStream = context.contentResolver.openOutputStream(uri)
    ?: throw Exception("无法创建输出流 - 可能是权限问题或存储已满")
outputStream.use { ... }
```

### 2. 三层验证机制

```kotlin
// 第1层:检查文件是否为空(0字节)
if (writtenContent.isEmpty()) {
    throw Exception("文件为空 (0 字节) - 写入失败")
}

// 第2层:检查长度是否匹配
if (writtenContent.length != json.length) {
    throw Exception("文件长度不匹配: 期望 ${json.length}, 实际 ${writtenContent.length}")
}

// 第3层:检查内容是否完全一致if (writtenContent != json) {
    throw Exception("文件内容校验失败 - 数据损坏")
}
```

## 防护场景

| 场景 | 检测方式 | 用户反馈 |
|------|----------|----------|
| **流创建失败** | Elvis 抛异常 | "无法创建输出流" |
| **0 字节写入** | isEmpty() 检查 | "文件为空 (0 字节)" |
| **部分写入** | 长度比对 | "文件长度不匹配" |
| **数据损坏** | 内容比对 | "文件内容校验失败" |

## 原子性保证

```
 成功路径:写入完整 → 验证通过 → "备份文件已保存并验证成功"
 失败路径:任何异常 → 删除文件 → "保存失败: [具体原因]"
```

## 验证

编译成功: BUILD SUCCESSFUL in 21s

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-26 22:49:49 -08:00
..
.claude refactor: simplify mpc-service to gateway mode 2025-12-06 17:16:14 -08:00
api-gateway fix(kong): remove ws/wss protocols from WebSocket route 2026-01-18 21:36:30 -08:00
infrastructure chore(docker): 为 mpc-system、api-gateway、infrastructure 添加时区配置 2025-12-23 18:35:09 -08:00
mpc-system fix(android): 增强备份导出验证 - 添加 0 字节检查和显式流创建检查 [CRITICAL] 2026-01-26 22:49:49 -08:00
scripts fix(scripts): 修正容器名为 rwa-blockchain-service 2025-12-15 10:34:25 -08:00
services fix(contribution-service): CDC planting_orders 阶段按 order_id 排序处理 2026-01-23 03:41:14 -08:00
.env.windows fix(referral): 修复 getMyReferralInfo 使用 userId 而不是 accountSequence 的问题 2025-12-14 05:05:03 -08:00
docker-compose.windows.yml feat(service-party-app): implement co-sign multi-party signing 2025-12-30 18:36:11 -08:00