一、准备工作
1. 环境与工具安装
- Node.js 18.x LTS:直接下载安装包 https://nodejs.org/dist/v18.20.4/node-v18.20.4-x64.msi ,一路点击“下一步”安装
- VS Code: https://code.visualstudio.com/Download ,安装默认插件“Live Server”“Prettier”“ESLint”
- 轻量API网关工具Hutool-API(Java无需额外依赖环境,用嵌入式Tomcat):下载完整JAR包 https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar
- 本地JSON档案库示例:新建文件夹`local-archives`,里面放入预整理的结构化/非结构化JSON样本
2. 预整理本地档案资源
将已有零散的档案(如Word/PDF转文本+元数据、Excel转结构化数据)统一整理成JSON格式,分为两类:
- 结构化档案(如档案目录、借阅记录):每个对象包含唯一ID、类型、名称、摘要、创建时间、存储路径
- 非结构化档案索引:仅存元数据+对应文件在本地的绝对路径,避免JSON过大
完整结构化档案样本`archive-directory.json`(可直接复制到`local-archives`):
```json
[
{
"id": "AD-2024-0001",
"type": "文书档案",
"name": "XX公司2024年度技术创新立项报告",
"summary": "涵盖AI档案检索、云存储融合两项核心技术立项内容",
"create_time": "2024-01-15",
"storage_path": "C:\\Users\\Public\\Documents\\archives\\doc\\AD-2024-0001.docx"
},
{
"id": "AD-2024-0002",
"type": "声像档案",
"name": "XX技术创新大会2024全程录像",
"summary": "120分钟会议内容,包含技术方案演示、颁奖环节",
"create_time": "2024-03-20",
"storage_path": "C:\\Users\\Public\\Documents\\archives\\video\\AD-2024-0002.mp4"
}
]
```
二、搭建轻量级档案API网关
1. 编写Hutool嵌入式网关代码
新建文件夹`api-gateway`,创建`ArchiveApi.java`文件,完整可直接编译运行代码如下:
```java
import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONUtil;
import cn.hutool.http.server.HttpServer;
import cn.hutool.http.server.HttpServerRequest;
import cn.hutool.http.server.HttpServerResponse;
import cn.hutool.http.server.action.Action;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public class ArchiveApi {
// 配置本地JSON档案库路径
private static final String LOCAL_ARCHIVE_DIR = "C:\\Users\\Public\\Documents\\local-archives";
// 配置监听端口
private static final int PORT = 8081;
public static void main(String[] args) {
HttpServer server = HttpServer.create(PORT);
// 添加跨域支持(关键,避免多平台融合时的跨域报错)
server.addFilter((req, res, chain) -> {
res.addHeader("Access-Control-Allow-Origin", "");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
res.addHeader("Access-Control-Allow-Headers", "Content-Type");
if ("OPTIONS".equals(req.getMethod())) {
res.send("");
return;
}
chain.doFilter(req, res);
});
// 获取所有档案目录的API
server.addAction("/api/archives/list", new Action() {
@Override
public void doAction(HttpServerRequest req, HttpServerResponse res) throws IOException {
File dirFile = new File(LOCAL_ARCHIVE_DIR);
File[] jsonFiles = FileUtil.loopFiles(dirFile, file -> file.getName().endsWith(".json"));
StringBuilder allArchives = new StringBuilder("[");
boolean first = true;
for (File jsonFile : jsonFiles) {
String content = FileUtil.readUtf8String(jsonFile);
List