使用Code Push Server推送更新时抛出错误,更新无法下发
问题描述
执行命令 code-push-standalone release-react myapp-android android 推送更新后,文件已成功上传至AWS存储桶,但服务器抛出以下错误,导致更新无法下发至应用:
Are you using a Stream of unknown length as the Body of a PutObject request? Consider using Upload instead from @aws-sdk/lib-storage. An error was encountered in a non-retryable streaming request. Unknown error source NotImplemented: A header you provided implies functionality that is not implemented at throwDefaultError (/code-push-server/api/node_modules/@smithy/smithy-client/dist-cjs/index.js:836:20) at /code-push-server/api/node_modules/@smithy/smithy-client/dist-cjs/index.js:845:5 at de_CommandError (/code-push-server/api/node_modules/@aws-sdk/client-s3/dist-cjs/index.js:4739:14) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async /code-push-server/api/node_modules/@smithy/middleware-serde/dist-cjs/index.js:35:20 at async /code-push-server/api/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:485:18 at async /code-push-server/api/node_modules/@smithy/middleware-retry/dist-cjs/index.js:320:38 at async /code-push-server/api/node_modules/@aws-sdk/middleware-flexible-checksums/dist-cjs/index.js:263:18 at async /code-push-server/api/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:110:22 at async /code-push-server/api/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:138:14
当前使用支持AWS功能的code-push-server分支,且已添加文档要求的必要环境变量。
解决方案
- 替换S3上传实现:找到code-push-server中处理S3上传的代码,将原本使用
PutObjectCommand上传未知长度流的逻辑,替换为@aws-sdk/lib-storage中的Upload类——该类支持分块上传,可适配未知长度流的场景 - 对齐AWS SDK版本:确保项目中
@aws-sdk/client-s3和@aws-sdk/lib-storage的版本保持一致,避免因版本不兼容引发功能未实现的错误 - 验证存储桶与权限:检查AWS存储桶是否启用分块上传(默认开启,若有自定义配置需确认),同时确保code-push-server使用的IAM账号拥有
s3:PutObject、s3:AbortMultipartUpload、s3:ListMultipartUploadParts等上传相关权限 - 临时修复方案:若暂时无法修改代码,可在打包更新包时确保上传文件的流长度已知(例如先将文件读取到本地获取大小后再上传,不建议用于大文件)
内容的提问来源于stack exchange,提问作者Irfan wani
相关产品推荐
相关产品推荐

