中转架构技术方案

结合阿里云中转服务 — SDK拍照 与 文件监控 两种模式的技术分析与对比

一、方案概述

🏗️ 什么是中转架构

已有的阿里云服务器上部署一个轻量中转服务,学校老师的本地电脑不再直接连接 FTP 服务器,而是通过 HTTP API 将图片发给中转服务。中转服务收到图片后直接保存到阿里云本地磁盘(也可选转发到 FTP)。老师电脑上不存储任何 FTP 密码

注意 已有阿里云 ECS 可以直接作为中转服务器,无需额外机器。

📐 整体架构图

🏫 老师电脑
Node.js 本地服务
HTTP POST
图片 + API Key
☁️ 阿里云中转
认证 + 存本地磁盘
直接写入磁盘
(可选 FTP 转发)
💾 阿里云本地磁盘
默认存储

本地服务只配一个 API 地址 + Key,中转服务直接存阿里云磁盘(无需 FTP)

🔄 中转服务 API 定义

POST http://中转IP:8080/upload
Headers:
  X-API-Key: sk_xxxxxx              # 学校身份标识
  Content-Type: application/json

Body:
{
  "image": "data:image/jpeg;base64,...",   // 图片 base64
  "name": "张三",                           // 操作人
  "filename": "张三_时间戳.jpg"              // 文件名
}

成功: { "success": true, "path": "张三_xxx.jpg", "size": 243461 }
失败: { "success": false, "message": "原因" }

二、两种模式在中转架构下的技术方案

📷 SDK 拍照模式

触发方式 浏览器点击「拍照」

数据流

浏览器点拍照 本地SDK
WebSocket
base64图片 中转API
HTTP POST

上传函数 将原有的 uploadToFtp() 替换为 HTTP POST 到中转服务

改造成本 修改 server.js 中约 30 行代码(uploadToFtp 函数 + 配置加载)

用户操作 不变,仍然在浏览器点拍照 → 预览 → 自动上传

📁 文件监控模式

触发方式 文件保存到监控目录

数据流

EloamCamera
保存图片
chokidar
检测新文件
读文件 → Buffer 中转API
HTTP POST

上传函数 与 SDK 模式调用同一个中转上传函数

改造成本 同样修改 server.js 中约 30 行代码

用户操作 不变,仍然拍照保存即自动上传

📝 改造后的上传函数(两种模式共用)

// 替换原有的 uploadToFtp() — 不再需要 FTP 凭证
async function uploadToRelay(buffer, filename, name) {
  const config = loadRelayConfig();   // 只包含 apiUrl + apiKey
  const base64 = buffer.toString('base64');
  const res = await fetch(config.apiUrl, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': config.apiKey
    },
    body: JSON.stringify({
      image: 'data:image/jpeg;base64,' + base64,
      name: name || '',
      filename: filename
    })
  });
  if (!res.ok) throw new Error('中转服务返回 ' + res.status);
  return res.json();
}

三、中转架构下:SDK拍照 vs 文件监控 对比

对比维度SDK 拍照 + 中转文件监控 + 中转
拍照方式浏览器触发,SDK 控制摄像头EloamCamera.exe 官方软件
上传触发拍照完成后立即 POST 到中转chokidar 检测新文件 → POST 到中转
图片获取SDK 返回 base64,直接 POST读取文件为 Buffer → 转 base64 → POST
中转调用方式完全相同完全相同
需要 EloamCamera.exe不需要需要
需要 eloamwebservice需要不需要
密码安全性安全 — 本地无 FTP 密码
网络要求本地电脑能访问阿里云中转服务(HTTP/HTTPS)
传输链路本地 → (HTTP) → 阿里云中转 → (FTP) → 存储服务器

📊 能力对比(中转架构下)

能力项SDK 拍照文件监控胜出
批量效率⭐⭐ 每张 5-6 秒⭐⭐⭐⭐ 连续拍无等待监控
拍照功能完整度⭐⭐ 基础拍照 + 自动纠偏⭐⭐⭐⭐⭐ 官方软件全部功能监控
密码安全性⭐⭐⭐⭐⭐ 本地无密码⭐⭐⭐⭐⭐ 本地无密码持平
部署复杂度⭐⭐ eloamwebservice + Node.js + 中转⭐⭐⭐ 只需 Node.js + 中转监控
稳定性⭐⭐⭐ SDK 偶有异常⭐⭐⭐⭐⭐ 文件系统稳定监控
文件名自定义⭐⭐⭐⭐⭐ 完全可控⭐⭐ 使用原始文件名SDK
实时预览⭐⭐⭐⭐ 网页预览⭐⭐ 无预览SDK

四、风险说明

📋 风险清单

🔴 中转服务单点故障

直连架构下,即使阿里云宕机,本地拍照完全不受影响(仅上传失败)。中转架构下,中转服务如果挂了,所有学校都无法上传

缓解:使用 pm2 守护进程 + 监控告警;可在本地保留一份 FTP 直连作为降级方案。

🔴 API Key 传输泄露

如果中转服务只暴露 HTTP(无 HTTPS),API Key 在网络传输中是明文,可能被中间人截获。

缓解:必须配置 HTTPS(阿里云免费 SSL 证书);或在阿里云内网使用(VPC)。

🟠 传输延迟增加

多一跳网络:图片先从老师电脑到阿里云(HTTP),再写入阿里云磁盘。对于大图片(~500KB),增加约 100-300ms 延迟(比 FTP 转发方案更短,因为省去了第二跳到 FTP 服务器)。

🟠 中转服务自身安全

阿里云中转服务如果被入侵,攻击者可访问存储的所有图片。但如果中转服务只存本地磁盘而不持有 FTP 凭证,则攻击者无法横向移动到其他系统。

缓解:中转服务器最小权限原则;定期安全更新;阿里云安全组只放行中转 API 端口。

🟠 运维成本增加

需要额外维护一台阿里云 ECS:系统更新、日志清理、监控告警、故障排查。直连架构则完全不需要。

🟢 密码泄露风险消除

中转架构最大的收益:FTP 密码完全从老师电脑上消失,即使老师电脑被植入木马,攻击者也拿不到 FTP 凭证。

⚠️ 两种模式在中转架构下的特有风险

风险SDK 拍照 + 中转文件监控 + 中转
上传失败通知 网页即时显示错误,用户知晓 静默失败 用户无感知,文件堆积
中转服务依赖 上传失败但拍照可用 上传失败但拍照可用(文件暂存本地)
文件丢失风险 上传失败则丢弃(未保存到本地) 源文件保留 失败后仍在监控目录

五、实现难度评估

☁️ 阿里云中转服务

难度
中等
  • 需要一台阿里云 ECS(推荐 2核4G)
  • 编写约 50 行 Node.js 中转代码(express + basic-ftp)
  • 配置 API Key 认证逻辑
  • 按学校分流存储目录
  • 部署时间:约 1-2 小时

💻 本地服务改造

难度
  • 修改 server.js 中 uploadToFtp() 函数
  • 将 ftp_config.json 替换为 relay_config.json
  • 改动量约 30 行代码
  • 两种模式(SDK / 文件监控)共用同一上传函数
  • 改造时间:约 30 分钟

📋 实现工作量总表

模块代码量难度依赖预估工时
阿里云中转服务 ~50 行 中等 express + basic-ftp 1-2 小时
本地 — uploadToRelay() ~20 行 无需新依赖(fetch 内置) 20 分钟
本地 — 配置加载改造 ~10 行 10 分钟
HTTPS 配置 SSL 证书(阿里云免费) 30 分钟
部署上线 + 验证 中等 阿里云 ECS + 安全组 1 小时
总计 ~80 行 3-4 小时

📦 老师电脑部署方式

文件监控模式必须在老师本地 Windows 电脑上安装服务,有两种方式:

方式操作老师需要做什么
压缩包 + start.bat ftp-upload/ 目录打包发给老师 解压 → 双击 start.bat
安装程序 setup.exe 用 Inno Setup / NSIS 打包成安装程序(约 30 分钟配置) 双击 setup.exe → 下一步 → 完成

两种方式底层相同,安装程序只是把解压 + 创建快捷方式 + 开机自启等步骤自动化。老师电脑仍需先安装 Node.js(可打包进安装程序引导安装)。

⚠️ 多人共用电脑的重要注意事项

① 每个老师需要独立的监控文件夹

如果多位数老师共用一台电脑(各自用 Windows 账号登录),不能共用同一个监控文件夹。每个老师的文件应隔离到各自的用户目录下:

推荐路径(每人独立):
C:\Users\老师A\Pictures\高拍仪扫描\
C:\Users\老师B\Pictures\高拍仪扫描\
C:\Users\老师C\Pictures\高拍仪扫描\

每个老师运行自己的 start.bat,各自监控自己的文件夹,上传时携带不同的 API Key(区分学校)或同一 Key(区分老师靠文件名中的姓名)。

② EloamCamera.exe 保存路径需要手动设置

文件监控依赖 EloamCamera 把图片存到监控文件夹。EloamCamera 默认保存路径不是监控文件夹,需要老师第一次使用时手动设置:

设置方法:
EloamCamera.exe → 设置/配置 → 保存路径
→ 修改为: C:\Users\当前用户名\Pictures\高拍仪扫描\
→ 确认保存

安装程序可以在首次运行时弹出提示引导老师完成此设置。

六、选择建议

选 SDK拍照 + 中转

  • ✓ 老师电脑没有 EloamCamera.exe
  • ✓ 需要网页预览后确认再上传
  • ✓ 拍照量少,不在意单张 5-6 秒
  • ⚠ 需额外安装 eloamwebservice

选 文件监控 + 中转

  • ✓ 大量批量扫描(首选方案)
  • ✓ 希望拍照即自动上传
  • ✓ 对稳定性要求高
  • ✓ 不需要网页预览

📌 总结

中转架构的核心价值是消除本地密码存储风险。两种拍照模式的上传链路在中转架构下完全统一(HTTP POST → 中转服务 → 阿里云本地磁盘),改造量小。已有阿里云服务器可直接作为中转,无需额外机器。建议日常使用文件监控 + 中转作为主力方案,SDK 拍照作为备用。

⚠ 最大风险:中转服务本身成为单点故障和新的攻击面。需要在安全性和运维成本之间权衡。