feat(file): 添加文件内容提取 API 支持分页读取

- FileController: 新增 fetch API 通过路径获取文本内容
  - FileController: one API 支持 with_text 参数提取文本
  - ManticoreFile: 实现分页提取 extractFileContentPaginated
  - TextExtractor: 添加 truncate 参数支持内容截取
This commit is contained in:
kuaifan
2026-01-16 01:39:19 +00:00
parent 6c22e373f7
commit 23b06327d6
3 changed files with 185 additions and 27 deletions

View File

@@ -233,11 +233,12 @@ class TextExtractor
/**
* 获取文件内容
* @param $filePath
* @param int $fileMaxSize 最大文件大小,单位字节默认1024KB
* @param int $contentMaxSize 最大内容大小,单位字节默认300KB
* @param int $fileMaxSize 最大文件大小,单位KB默认1024KB
* @param int $contentMaxSize 最大内容大小,单位KB默认300KB
* @param bool $truncate 超过contentMaxSize时是否截取默认true截取false返回错误
* @return array
*/
public static function extractFile($filePath, int $fileMaxSize = 1024, int $contentMaxSize = 300): array
public static function extractFile($filePath, int $fileMaxSize = 1024, int $contentMaxSize = 300, bool $truncate = true): array
{
if (!file_exists($filePath) || !is_file($filePath)) {
return Base::retError("Failed to read contents of {$filePath}");
@@ -248,8 +249,13 @@ class TextExtractor
try {
$extractor = new self($filePath);
$content = $extractor->extractContent();
if (strlen($content) > $contentMaxSize * 1024) {
return Base::retError("Content size exceeds " . Base::readableBytes($contentMaxSize * 1024) . ", unable to display content");
$maxBytes = $contentMaxSize * 1024;
if (strlen($content) > $maxBytes) {
if ($truncate) {
$content = mb_substr($content, 0, $maxBytes);
} else {
return Base::retError("Content size exceeds " . Base::readableBytes($maxBytes) . ", unable to display content");
}
}
return Base::retSuccess("success", $content);
} catch (Exception $e) {