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

使用Dart http包上传Google Drive时Bad file descriptor错误排查

Dart http包调用Google Drive可恢复上传出现Bad file descriptor错误的排查

我在使用Dart的http包调用Google Drive API执行可恢复上传时,部分线上用户遇到了奇怪的Bad file descriptor错误,无法复现该问题,希望了解错误含义以排查原因。

我严格按照Google Drive官方文档执行文件更新流程:

  • 先向https://www.googleapis.com/upload/drive/v3/files/<some file ID>?uploadType=resumable发送PATCH请求获取上传URI,请求体为空JSON字典({}),并设置必要请求头:X-Upload-Content-Type设为文件MIME类型,X-Upload-Content-Length设为文件字节大小,Content-Type设为application/json; charset=UTF-8,Content-Length设为空JSON体的大小,此步骤始终成功。
  • 从响应的location头中获取上传URI(格式类似https://www.googleapis.com/upload/drive/v3/files/<some file ID>?uploadType=resumable&upload_id=<a long string>)
  • 向该URI发送PUT请求,请求体为文件字节,Content-Length设为文件长度

该流程在本地及多数用户处正常,但部分用户在最后一步(PUT请求)报错,错误信息仅为Bad file descriptor。

已验证文件与MIME类型匹配(涉及text/plain和application/gzip两种类型,均出现该错误),测试场景下完全符合要求。线上用户的唯一变量是文件内容,报错时GZIP文件的前几个字节完全符合GZIP成员规范,文件有效。

更新
最终确认这是Dart http包的问题,与Google Drive无关。该错误多在连接断开或设备锁屏时触发,主要影响iOS用户(部分Android用户也会遇到)。Bad file descriptor通常表示尝试访问不存在或无权限的资源,推测是上传过程中设备锁屏等情况导致包失去文件访问权限。

iOS端的可行解决办法是使用cupertino_http客户端替代默认实现,配置方法参考http包文档说明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:27:23