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

iOS Firebase Storage上传Zip文件时触发Unknown Error(错误码40/Message too long)且重试多次才成功的问题求助

iOS Firebase Storage上传Zip文件时触发Unknown Error(错误码40/Message too long)且重试多次才成功的问题求助

我正在开发iOS应用,需要把Documents目录下的Zip文件上传到Firebase Storage,目前遇到了一个很诡异的问题,想请教下大家。

问题场景与核心代码

我先创建了Storage引用,然后调用putFile方法发起上传:

let storageReference = ORBFirestore.getStorage()
    .reference(withPath: "users/")
    .child("\(userId)/\(sensorZippedFolder.lastPathComponent)")
let uploadTask = storageReference.putFile(from: sensorZippedFolder, metadata: self.remoteStorageMetaData)

待上传的Zip文件路径是:
file:///var/mobile/Containers/Data/Application/861A23DF-EF32-4458-AA9D-C3F94BB1A4F8/Documents/Session_AmOH6ME627mVbOeIdVIT.zip

观察上传进度时,能看到进度条走到100%,但紧接着就抛出了错误,上传失败。

错误详情

收到的错误信息如下,核心是FirebaseStorage.StorageError.unknown,附带的底层错误提示是Message too long,错误码为40:

Failed to upload zip to remote storage: FirebaseStorage.StorageError.unknown(message: "Unexpected 40 code from backend", serverError: ["NSErrorPeerAddressKey": <1c1e01bb 00000000 2a001450 400b0c02 00000000 0000005f 00000000>, "_NSURLErrorRelatedURLSessionTaskErrorKey": <__NSArrayI 0x10fe5e020>(
    BackgroundUploadTask .<1>,
    LocalUploadTask .<1>
) , "_kCFStreamErrorCodeKey": 40, "_NSURLErrorFailingURLSessionTaskErrorKey": BackgroundUploadTask .<1>, "_kCFStreamErrorDomainKey": 1, "ResponseErrorDomain": "NSPOSIXErrorDomain", "ResponseErrorCode": 40, "bucket": "orb-storage-01-dev-us", "NSUnderlyingError": Error Domain=NSPOSIXErrorDomain Code=40 "Message too long" UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=BackgroundUploadTask .<1>, _kCFStreamErrorDomainKey=1, NSErrorPeerAddressKey={length = 28, bytes = 0x1c1e01bb 00000000 2a001450 400b0c02 ... 0000005f 00000000 }, _kCFStreamErrorCodeKey=40, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "BackgroundUploadTask .<1>",
    "LocalUploadTask .<1>"
)}}, "object": "users/IeQFdqCmT9Xncfo2zNf2iugd7Yp2/Session_AmOH6ME627mVbOeIdVIT.zip"])

已尝试的解决方法

我已经试过以下几种方案,但都没能彻底解决问题:

  • 强制将上传操作放在主线程执行
  • 将Zip文件移动或复制到其他目录后再发起上传
  • 改用putData方法替代putFile上传

目前唯一能"解决"的方式是反复重试上传,试个几次之后偶尔能成功,但这个方式显然不适合线上环境。

我的疑问

  1. 这里的Message too long错误具体指什么?是请求头过长?还是文件本身的问题?
  2. 为什么错误会随机出现,重试多次后又能成功?
  3. 有没有稳定的解决办法能避免这个问题?

非常感谢大家的帮助!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:23:01