如何规避node-canvas的loadImage接口多字节文件路径加载bug
node-canvas 2.7.0多字节路径加载图片失败规避方案
node-canvas 2.7.0内部对文件路径的编码处理存在缺陷,遇到包含中文、日文等非ASCII多字节字符的路径时,会出现路径解析错误,触发File not found报错,对应触发代码如下:
const { loadImage } = require('canvas'); const image = await loadImage('/Users/ユーザ名/Documents/test.png');
可用规避方案
- 方案1:升级node-canvas到2.8.0及以上版本
该路径编码bug在2.8.0版本已被官方修复,直接升级依赖即可解决,升级命令:npm install canvas@^2.8.0 - 方案2:无法升级版本时,先读取文件为Buffer再传入
loadImage
该方式绕开了node-canvas内部的路径解析逻辑,兼容性最佳,Node.js原生fs模块对多字节路径的支持正常,示例代码如下:const { loadImage } = require('canvas'); const fs = require('fs/promises'); // 先读取文件为Buffer const imageBuffer = await fs.readFile('/Users/ユーザ名/Documents/test.png'); // 传入Buffer加载图片 const image = await loadImage(imageBuffer);
内容的提问来源于stack exchange,提问作者kochizufan
相关产品推荐
相关产品推荐

