You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Node.js中Formidable的File对象转为Sharp可识别的Buffer?

问题解析:Formidable File对象无法直接转为Sharp可用Buffer的原因

核心原因

Formidable返回的files.image是它自定义的File类实例,并非Node.js原生的Buffer、ArrayBuffer或可被Buffer.from()识别的类型,所以直接调用Buffer.from(files.image)会触发类型错误。

具体细节拆解

  • Formidable File的本质:Formidable处理文件上传时,会自动把文件写入服务器临时目录,返回的File对象只是包含文件元数据(如文件名、大小、临时路径filepath)的封装对象,不直接持有文件内容的Buffer。它既不是浏览器环境的File对象(没有arrayBuffer()方法),也不是Node.js的Buffer实例,自然不被Buffer.from()接受。
  • Buffer.from()的参数限制:根据Node.js的规则,Buffer.from()仅接受字符串、Buffer、ArrayBuffer、数组或类数组对象作为入参,Formidable的File实例不在此范围内,指定base64编码也无济于事——因为编码参数只在入参是字符串时生效,而你传入的是一个不符合要求的对象。
  • 临时路径可行的原因:Sharp本身支持直接传入文件路径(sharp(files.image.filepath)),这是因为Sharp内部会通过文件系统读取对应路径的内容,流式处理转换,无需手动转Buffer。

若非要转Buffer(不推荐)

如果一定要先转成Buffer再给Sharp处理,可通过Node.js的fs模块读取临时文件内容:

const fs = require('fs/promises');
// 读取临时文件得到Buffer
const fileBuffer = await fs.readFile(files.image.filepath);
// 传入Sharp处理
const webpResult = await sharp(fileBuffer).toFormat('webp').toBuffer();

不过这种方式多了一次文件读取操作,效率不如直接传入临时路径(Sharp可直接流式处理,减少内存占用)。

内容的提问来源于stack exchange,提问作者engineer-x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:45:51