使用aws-amplify storage上传文件到S3时ERR_CONNECTION_RESET报错如何解决
问题现象
- 基于aws-amplify Storage能力向S3上传文件时,偶发抛出网络错误,复现无稳定规律
- 控制台打印的错误栈:
ConsoleLogger.js:133 [ERROR] 34:07.292 axios-http-handler Error: Network Error at LYNF.e.exports (createError.js:17) at XMLHttpRequest.p.onerror (xhr.js:80) e._log @ ConsoleLogger.js:133 ConsoleLogger.js:141 [WARN] 34:07.293 AWSS3Provider - error uploading Error: Network Error at LYNF.e.exports (createError.js:17) at XMLHttpRequest.p.onerror (xhr.js:80) - 浏览器DevTools网络面板可观测到请求状态为
ERR_CONNECTION_RESET - 当前使用的依赖版本:
aws-amplify@3.0.20aws-amplify-react@4.1.19
核心原因
连接被重置本质是TCP传输链路在数据送达对端前被中断,结合当前版本的实现逻辑,偶发触发的场景通常包括:
- aws-amplify 3.x版本默认分片上传的单分片大小为10MB,当上传链路经过企业代理、WAF、区域CDN时,这类中间层通常对单请求最大传输大小有5MB左右的限制,超限后会主动重置连接
- 3.0.20版本的S3上传逻辑底层基于axios XMLHttpRequest适配器实现,默认未配置请求重试策略,遇到运营商链路抖动、浏览器长连接回收时,单次失败直接抛出网络错误
- 该版本存在已知的Chromium内核兼容问题:高版本Chrome下,大文件传输过程中浏览器会提前中断未完成的XMLHttpRequest,触发连接重置
- 部分网络环境下,S3上传端点的CDN节点空闲超时配置过短,文件较大时传输耗时超过超时阈值,连接被服务端主动断开
可落地的解决方案
- 显式调整分片上传参数
在Amplify全局配置中强制设置单分片大小为5MB,适配绝大多数中间层的传输阈值,避免单分片超限触发连接重置,配置示例:Amplify.configure({ Storage: { bucket: '对应S3桶名', region: '业务所在AWS区域', part_size: 5 * 1024 * 1024 // 单分片5MB,符合S3分片上传的兼容要求 } }) - 增加网络层错误的重试兜底
针对Network Error、ERR_CONNECTION_RESET类的链路层错误,给上传方法增加最多2-3次的重试逻辑,偶发的网络抖动即可通过重试覆盖;注意不要对权限错误、文件格式错误等业务类错误做重试,避免无效请求 - 排查链路中间层配置
确认上传路径经过的代理、WAF、CDN节点的空闲超时设置不低于30s,避免大文件传输过程中被主动断连 - 版本小范围升级修复
如果上述调整后仍有偶发报错,可将aws-amplify升级到3.x系列的最终稳定版,该版本修复了高版本Chromium下XMLHttpRequest中断的兼容问题,不需要升级aws-amplify-react大版本即可兼容现有业务代码,避免升级带来的兼容风险
内容的提问来源于stack exchange,提问作者Hitesh Chaudhari
相关产品推荐
相关产品推荐

