mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-09 06:49:02 +08:00
feat(fs): 添加自动识别编码读取文本文件功能
实现通过自动检测文件编码来读取文本文件的功能 在IPC通道、预加载API和文件服务中添加相关方法
This commit is contained in:
parent
9609061d82
commit
c04cd3b71e
@ -156,6 +156,7 @@ export enum IpcChannel {
|
|||||||
File_Base64File = 'file:base64File',
|
File_Base64File = 'file:base64File',
|
||||||
File_GetPdfInfo = 'file:getPdfInfo',
|
File_GetPdfInfo = 'file:getPdfInfo',
|
||||||
Fs_Read = 'fs:read',
|
Fs_Read = 'fs:read',
|
||||||
|
Fs_ReadText = 'fs:readText',
|
||||||
File_OpenWithRelativePath = 'file:openWithRelativePath',
|
File_OpenWithRelativePath = 'file:openWithRelativePath',
|
||||||
File_IsTextFile = 'file:isTextFile',
|
File_IsTextFile = 'file:isTextFile',
|
||||||
|
|
||||||
|
|||||||
@ -470,6 +470,7 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) {
|
|||||||
|
|
||||||
// fs
|
// fs
|
||||||
ipcMain.handle(IpcChannel.Fs_Read, FileService.readFile.bind(FileService))
|
ipcMain.handle(IpcChannel.Fs_Read, FileService.readFile.bind(FileService))
|
||||||
|
ipcMain.handle(IpcChannel.Fs_ReadText, FileService.readTextFileWithAutoEncoding.bind(FileService))
|
||||||
|
|
||||||
// export
|
// export
|
||||||
ipcMain.handle(IpcChannel.Export_Word, exportService.exportToWord.bind(exportService))
|
ipcMain.handle(IpcChannel.Export_Word, exportService.exportToWord.bind(exportService))
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { readTextFileWithAutoEncoding } from '@main/utils/file'
|
||||||
import { TraceMethod } from '@mcp-trace/trace-core'
|
import { TraceMethod } from '@mcp-trace/trace-core'
|
||||||
import fs from 'fs/promises'
|
import fs from 'fs/promises'
|
||||||
|
|
||||||
@ -8,4 +9,15 @@ export default class FileService {
|
|||||||
if (encoding) return fs.readFile(path, { encoding })
|
if (encoding) return fs.readFile(path, { encoding })
|
||||||
return fs.readFile(path)
|
return fs.readFile(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动识别编码,读取文本文件
|
||||||
|
* @param _ event
|
||||||
|
* @param pathOrUrl
|
||||||
|
* @throws 路径不存在时抛出错误
|
||||||
|
*/
|
||||||
|
@TraceMethod({ spanName: 'readTextFileWithAutoEncoding', tag: 'FileService' })
|
||||||
|
public static async readTextFileWithAutoEncoding(_: Electron.IpcMainInvokeEvent, path: string): Promise<string> {
|
||||||
|
return readTextFileWithAutoEncoding(path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -168,6 +168,7 @@ export function getMcpDir() {
|
|||||||
* 读取文件内容并自动检测编码格式进行解码
|
* 读取文件内容并自动检测编码格式进行解码
|
||||||
* @param filePath - 文件路径
|
* @param filePath - 文件路径
|
||||||
* @returns 解码后的文件内容
|
* @returns 解码后的文件内容
|
||||||
|
* @throws 如果路径不存在抛出错误
|
||||||
*/
|
*/
|
||||||
export async function readTextFileWithAutoEncoding(filePath: string): Promise<string> {
|
export async function readTextFileWithAutoEncoding(filePath: string): Promise<string> {
|
||||||
const encoding = (await chardet.detectFile(filePath, { sampleSize: MB })) || 'UTF-8'
|
const encoding = (await chardet.detectFile(filePath, { sampleSize: MB })) || 'UTF-8'
|
||||||
|
|||||||
@ -176,7 +176,8 @@ const api = {
|
|||||||
isTextFile: (filePath: string): Promise<boolean> => ipcRenderer.invoke(IpcChannel.File_IsTextFile, filePath)
|
isTextFile: (filePath: string): Promise<boolean> => ipcRenderer.invoke(IpcChannel.File_IsTextFile, filePath)
|
||||||
},
|
},
|
||||||
fs: {
|
fs: {
|
||||||
read: (pathOrUrl: string, encoding?: BufferEncoding) => ipcRenderer.invoke(IpcChannel.Fs_Read, pathOrUrl, encoding)
|
read: (pathOrUrl: string, encoding?: BufferEncoding) => ipcRenderer.invoke(IpcChannel.Fs_Read, pathOrUrl, encoding),
|
||||||
|
readText: (pathOrUrl: string): Promise<string> => ipcRenderer.invoke(IpcChannel.Fs_ReadText, pathOrUrl)
|
||||||
},
|
},
|
||||||
export: {
|
export: {
|
||||||
toWord: (markdown: string, fileName: string) => ipcRenderer.invoke(IpcChannel.Export_Word, markdown, fileName)
|
toWord: (markdown: string, fileName: string) => ipcRenderer.invoke(IpcChannel.Export_Word, markdown, fileName)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user