ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何在 Node.js 应用中集成 Magika JS 包识别 Buffer 的文件内容类型

如何在 Node.js 应用中集成 Magika JS 包识别 Buffer 的文件内容类型 如何在 Node.js 应用中集成 Magika JS 包识别 Buffer 的文件内容类型【免费下载链接】magikaFast and accurate AI powered file content types detection项目地址: https://gitcode.com/GitHub_Trending/ma/magika如果你的 Node.js 应用里已经拿到一个文件内容的Buffer例如上传接口读入的文件数据需要判断它的实际内容类型是 markdown、json、pdf 还是别的可以把 Magika 的 JS 包npm 包名magika集成进项目。magika包在 Node 环境下导出MagikaNode类调用identifyBytes传入Buffer后会返回一个包含最高概率标签label和分数score的对象。本文基于仓库中 js/README.md、docs/js.md 和 js/test/magika.test.ts 说明完整的集成与验证路径。准备安装 magika 包在项目中执行npm install magikamagika包当前 js/package.json 中版本为 0.2.14的tensorflow/tfjs为正式依赖tensorflow/tfjs-node列为可选依赖Node 端推理运行时由它加载使用 tfjs/node 版本的模型见 js/magika_node.ts 构造函数中的注释。主路径用 Buffer 识别文件内容类型最小可用的集成代码来自 js/README.mdimport { readFile } from fs/promises; import { MagikaNode as Magika } from magika; const data await readFile(some file); const magika new Magika(); await magika.load(); const prediction await magika.identifyBytes(data); console.log(prediction);其中readFile返回的data就是Buffer这正是identifyBytes的输入类型。Node 版的签名为identifyBytes(fileBytes: Uint16Array | Uint8Array | Buffer)见 js/magika_node.ts#L98-L101Buffer、Uint8Array、Uint16Array三种格式都接受magika.load()不传参数时模型与配置从 GitHub 上托管的地址加载默认地址定义在 js/magika.ts 的MODEL_URL与CONFIG_URLhttps://google.github.io/magika/model/model.json与https://google.github.io/magika/model/config.jsonidentifyBytes返回PromiseModelResult即包含 top label 及其 score 的字典见 docs/js.md。如果你不需要读文件只要把应用里已有的Buffer直接传给identifyBytes即可例如上传接口中的req.file.buffer。可选分支自定义模型与配置来源MagikaOptions接口定义在 js/src/magikaOptions.ts包含modelURL、modelPath、configURL、configPath四个可选字段。Node 版除了支持 URL还支持从本地文件加载Node onlyawait magika.load({ modelPath: ./assets/..., configPath: ./assets/... });URL 方式的对应写法await magika.load({ modelURL: https://..., configURL: https://..., });浏览器版的Magika类只支持 URL 方式本地文件路径是 Node 版独有的能力见 js/README.md “The Node version also allows to load local files”。如果你部署在无法访问默认 GitHub 地址的环境可以改成modelPath/configPath指向本地模型文件。需要全部内容的概率分布而不只是 top label 时改用identifyBytesFullconst result await magika.identifyBytesFull(data);它返回ModelResultLabels除label和score外还包含各内容类型与对应分数的列表见 docs/js.md。可选替代路径不读入内存用读流识别MagikaNode还提供identifyStream(stream, length)从ReadStream识别而无需把整个文件留在内存中length参数是流数据的总长度文档说明其用途是“找到文件中段而不把文件保持在内存里”。测试代码中展示了典型用法见 js/test/magika.test.tsconst streamResult await magika.identifyStream( fs.createReadStream(tests_data/basic/markdown/magika_test.md), (await fs.promises.stat(tests_data/basic/markdown/magika_test.md)).size );length通常来自fs.promises.stat(filePath).size。测试断言同一路径下identifyStream与identifyBytes返回相同 label两条路径结果一致。验证结果是否正确仓库自带测试文件目录 tests_data可用于手工核对。以 tests_data/basic/markdown/magika_test.md 为例把主路径代码中的文件换成它期望prediction.label为markdown。测试 js/test/magika.test.ts 的判定逻辑与此一致递归扫描tests_data/basic与tests_data/mitra按所在目录名作为期望 label 断言expect(streamResult.label).toBe(label)。测试中对 score 的判定是范围检查而非固定数值score应满足 0且 1见测试 “scores should be in the expected range”。注意不要把某次运行的具体 score 当作必须复现的数值。如果只想快速冒烟验证环境文档给出全局 CLI 方式npm install -g magika后执行magika-js some files可加--json-output输出 JSON见 js/README.md。该命令会全局安装包并触发默认模型下载注意其副作用。它适合确认模型加载正常批量与递归扫描场景文档建议改用官方 Python CLIpip install magika。边界与限制Node 端导入MagikaNode浏览器端导入Magika两者不要混用见 js/magika.ts 与 js/magika_node.ts 中的说明。测试目前跳过dockerfile、toml、typescript、yara四类测试代码注释说明原因是“Magika V2 尚跳过这些类型暂在测试中排除”见 js/test/magika.test.ts 的SKIP_FUTURE_CONTENT_TYPES。用这些类型验证时不要以测试断言作为期望。需要批量处理或递归搜索文件时文档建议走 Python 版 CLI 而不是本 JS 包。更多 API 细节参数与返回类型可查阅 docs/js.md。【免费下载链接】magikaFast and accurate AI powered file content types detection项目地址: https://gitcode.com/GitHub_Trending/ma/magika创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表