使用Node.js Sharp处理头像时遇「不支持图片格式」错误
解决Sharp裁剪头像时的「不支持图片格式」错误
首要修复:等待文件写入完成再处理
你的代码中image.mv是异步操作,但你没有等待它执行完毕就调用Sharp读取文件,这会导致Sharp读取到不完整的文件,进而误判为不支持的格式。
修改后的代码:
// 先等待文件移动完成 await image.mv(__dirname + "/upload/" + image.name); var input = __dirname + "/upload/" + image.name; try { await sharp(input) .extract({ width: 300, height: 300, left: 50, top: 70 }) .toFile(__dirname + "/upload/" + "pfp3.png"); } catch (error) { console.log(error); } res.sendStatus(200); });
额外排查方向
- 确认
upload文件夹存在:如果目标文件夹未创建,image.mv可能会失败,导致Sharp找不到文件也会触发格式错误。可以提前递归创建文件夹:const fs = require('fs').promises; await fs.mkdir(`${__dirname}/upload/`, { recursive: true }); - 重新安装Sharp依赖:如果Sharp的底层编译依赖有问题,也可能导致格式识别失败,执行以下命令重装:
npm uninstall sharp npm install sharp - 验证文件实际有效性:有些文件后缀是PNG/JPG,但实际内容损坏或格式不符,用系统图片查看器确认文件能否正常打开。
内容的提问来源于stack exchange,提问作者Tijmi
相关产品推荐
相关产品推荐

