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

使用msgraph-sdk-javascript的putStream上传大文件遇socket hang up问题

解决Microsoft Graph API putStream上传大文件时的socket hang up问题

这个ECONNRESET/socket hang up错误在上传稍大文件时出现,核心原因大概率是请求超时或者流传输过程中未正确处理中断。虽然Graph API支持4MB以内的单文件上传,但Node.js SDK的默认配置可能不足以支撑800KB文件的传输耗时(尤其是网络条件一般的情况下)。下面是几个针对性的解决方案:

1. 延长请求超时时间

SDK默认的HTTP请求超时通常比较短(比如10秒左右),800KB的文件如果网络速率一般,很容易超过这个时间导致连接被切断。你可以在API调用时单独设置超时,或者全局配置:

单个请求设置超时

client.api(ep + ':' + realxlspath + ':/content')
  .timeout(30000) // 设置为30秒,可根据实际网络情况调整
  .putStream(stream, function(err) {
    if (err) reject(err);
    else resolve(true);
  });

全局配置超时(所有请求生效)

const client = Client.init({
  authProvider: authProvider,
  requestOptions: {
    timeout: 30000 // 全局设置30秒超时
  }
});

2. 捕获文件流的错误

有时候文件读取过程中出现的错误(比如文件损坏、权限问题)会间接导致传输中断,但因为没有监听流的错误事件,最终表现为socket hang up。给读取流添加错误监听,提前排查问题:

var stream = fs.createReadStream(self.files[0].path);
// 监听文件流的错误
stream.on('error', (streamErr) => {
  console.error('读取文件时出错:', streamErr);
  reject(streamErr);
});

// 再执行上传
client.api(ep + ':' + realxlspath + ':/content')
  .timeout(30000)
  .putStream(stream, function(err) {
    if (err) reject(err);
    else resolve(true);
  });

3. 改用Promise/async-await风格调用

回调风格的处理有时候会掩盖一些异步过程中的问题,试试用Promise化的方式调用(新版SDK已经支持Promise返回),代码更清晰也更容易捕获错误:

var stream = fs.createReadStream(self.files[0].path);
stream.on('error', (streamErr) => reject(streamErr));

try {
  await client.api(ep + ':' + realxlspath + ':/content')
    .timeout(30000)
    .putStream(stream);
  resolve(true);
} catch (err) {
  reject(err);
}

4. 排查网络/代理环境

如果你的运行环境有HTTP代理,代理服务器可能设置了更短的超时时间,导致连接被提前中断。可以尝试直接连接网络测试,或者配置SDK的代理参数:

const client = Client.init({
  authProvider: authProvider,
  requestOptions: {
    timeout: 30000,
    proxy: 'http://your-proxy-server:port' // 根据实际代理配置
  }
});

为什么小文件没问题?

小文件(100KB以内)传输耗时短,能在SDK默认的超时窗口内完成整个请求,所以不会触发超时中断。而800KB的文件传输时间超过了默认阈值,就会出现socket hang up错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:32:47