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

使用request上传本地文件报错:Error: source.on is not a function

排查文件上传报错“Error: source.on is not a function”的思路

问题场景

我尝试使用以下代码将本地文件上传至指定URL,但持续抛出错误“Error: source.on is not a function”。推测该问题与fd.append的第二个参数有关,但尝试多种方案均未解决,恳请提供排查思路?

代码示例:

let file='screenshot.png'
let url='...some url...'

const fd = new FormData()
fd.append('screenshotFile', fs.createReadStream(file), 'screenshot.png')

try {
  request('POST', url, {form: fd})
}
catch(e){
  logger.log('ERROR',e)
}

错误信息:

'ERROR': Error: source.on is not a function


排查思路

  • 修正request库的参数字段
    request库中,传递FormData对象需要使用formData字段而非form字段,form字段仅支持普通键值对表单。修改后的请求代码:

    request('POST', url, {formData: fd})
    
  • 验证可读流的有效性
    确认fs.createReadStream(file)返回的是合法的可读流:

    const stream = fs.createReadStream(file);
    console.log(typeof stream.on); // 正常输出应为'function'
    

    若输出异常,检查:

    • 文件路径是否正确(相对路径基于当前进程工作目录)
    • 文件是否存在且拥有读取权限
  • 确保Node.js环境使用正确的FormData实现
    Node.js原生无FormData对象,需使用form-data包:

    1. 安装依赖:
      npm install form-data
      
    2. 引入包:
      const FormData = require('form-data');
      

    误用浏览器内置FormData会导致流处理逻辑异常。

  • 检查流的生命周期状态
    确保调用request时,可读流未被提前销毁或关闭,流的创建与请求调用需处于同一同步流程中,避免流被意外释放。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:11:29