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

Node.js使用Formidable上传多图访问path属性报错如何解决

问题解决

错误原因

你遇到的TypeError: Cannot set property 'data' of undefined报错和formidable的path属性读取无关,核心问题是:
新创建的User实例的img字段是空数组,直接通过user.img[i]访问的元素是undefined,无法直接给undefined的data属性赋值。

同时你的代码还有三处额外错误:

  • Mongoose模型中img数组元素的类型字段名为type,你代码中写的contentType[i]和模型定义不匹配,且不需要加下标[i]
  • 从fields中获取的noi是字符串类型,直接作为数字遍历建议先做类型转换
  • 直接用前端传递的noi作为遍历次数不够稳妥,建议直接用files.img.length作为遍历边界,避免参数传递错误导致的异常

修复方案

将你原有遍历图片的逻辑替换为以下代码即可:

// 可选校验:如果要求上传数量和提交的noi一致可以加这个判断
if (Number(fields.noi) !== files.img.length) {
  return res.status(400).json({error: '上传图片数量和提交的数量不匹配'})
}

// 遍历所有上传的图片
for(let i = 0; i < files.img.length; i++) {
  const currentFile = files.img[i];
  if (currentFile) {
    // 主动往img数组中添加新元素,而不是直接给下标位置赋值
    user.img.push({
      data: fs.readFileSync(currentFile.path),
      type: currentFile.type
    });
  }
}

额外优化建议

  • 图片读取完成后可以调用fs.unlinkSync(currentFile.path)删除formidable生成的临时文件,避免占用磁盘空间
  • 大体积图片不推荐直接以Buffer形式存储在MongoDB中,更建议存储本地文件路径或者对接云对象存储服务保存文件地址

内容的提问来源于stack exchange,提问作者sanket kushwaha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:36:03