feat(document): 实现多格式文档上传与解析功能
- 移除 AiChatController 中的 PDF 读取相关逻辑与依赖- 新增 DocumentController 支持文件上传接口 - 新增 DocumentIngestionService 接口及实现,负责文档处理流程 - 抽象 DocumentParser 接口统一各类文档解析器行为 - 重构所有具体文档读取器(PDF、HTML、JSON 等)实现新的解析接口- 引入 MultipartFileResource 工具类以适配 Spring AI 读取器 - 添加 DocumentUploadResponse 响应模型类 - 各文档读取器增加对文件扩展名和 MIME 类型的支持判断
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package com.hanserwei.chat.reader;
|
||||
|
||||
import org.springframework.core.io.ByteArrayResource;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 简单的 {@link ByteArrayResource},用于保留多部分文件的文件名。
|
||||
*/
|
||||
final class MultipartFileResource extends ByteArrayResource {
|
||||
|
||||
private final String filename;
|
||||
|
||||
private MultipartFileResource(byte[] byteArray, String filename) {
|
||||
super(byteArray);
|
||||
this.filename = filename;
|
||||
}
|
||||
|
||||
static MultipartFileResource of(MultipartFile file) {
|
||||
try {
|
||||
String originalFilename = Objects.requireNonNullElse(file.getOriginalFilename(), "upload");
|
||||
return new MultipartFileResource(file.getBytes(), originalFilename);
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new UncheckedIOException("读取多部分文件内容失败", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFilename() {
|
||||
return filename;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user