From 1864419e701eafd09d203e3db1bad1dc84de9705 Mon Sep 17 00:00:00 2001 From: icarus Date: Fri, 22 Aug 2025 16:52:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(ocr):=20=E6=B7=BB=E5=8A=A0=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E5=A4=A7=E5=B0=8F=E6=A3=80=E6=9F=A5=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 检查图像文件大小是否超过50MB限制 使用buffer读取文件替代直接路径识别 简化错误处理逻辑,直接抛出原始错误 --- src/main/services/ocr/OcrService.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/services/ocr/OcrService.ts b/src/main/services/ocr/OcrService.ts index e15608b2b6..a54c009cf8 100644 --- a/src/main/services/ocr/OcrService.ts +++ b/src/main/services/ocr/OcrService.ts @@ -1,4 +1,5 @@ import { loggerService } from '@logger' +import { MB } from '@shared/config/constant' import { ImageFileMetadata, ImageOcrProvider, @@ -9,6 +10,8 @@ import { OcrResult, SupportedOcrFile } from '@types' +import { statSync } from 'fs' +import { readFile } from 'fs/promises' import { getTesseractWorker } from './TesseractService' @@ -23,12 +26,16 @@ const logger = loggerService.withContext('main:OcrService') const tesseractOcr = async (file: ImageFileMetadata): Promise => { try { const worker = await getTesseractWorker() - const ret = await worker.recognize(file.path) + const stat = statSync(file.path) + if (stat.size > 50 * MB) { + throw new Error('This image is too large (max 50MB)') + } + const buffer = await readFile(file.path) + const ret = await worker.recognize(buffer) return ret.data.text } catch (e) { - const message = 'Failed to ocr with tesseract.' - logger.error(message, e as Error) - throw new Error(message) + logger.error('Failed to ocr with tesseract.', e as Error) + throw e } }