尧图精选

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

🕒 发布时间:2026/9/14 14:48:13 📁 来源:尧图网络
如何在 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),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →