【问题标题】:NSURLSession Background File Upload using Bound StreamsNSURLSession 使用绑定流上传后台文件
【发布时间】:2015-04-04 04:46:10
【问题描述】:

历史:

我正在做一个需要我们支持的项目:

  • 后台使用NSURLSession上传文件。
  • 服务器希望使用Content-Type: multipart/form-data 上传文件
  • 以前,我使用NSURLConnection 绑定一对流,如Apple Sample 中所述。
  • 现在,我希望通过使用uploadTaskWithStreamedRequest: 来遵循与NSURLSession(Background Session) 类似的方法。
  • 我编写了一个小的独立 iOS 示例 + 一个 PHP 服务器来验证我的概念。

问题:如果应用程序停留在前台,一切正常,但如果在上传过程中我按下主页键,上传失败一段时间后出现错误:

Domain=NSURLErrorDomain Code=-997 "失去与后台传输服务的连接"

在上传失败前不久,遇到了写入/生产者流的NSStreamEventEndEncountered

注意:我知道可以将整个 HTTP Post 正文写入临时文件并改用 NSURLSession's 文件上传 API 的解决方法。但如果我能做到的话,上面更合适。

问题:谁能猜出上传失败的可能原因是什么?

示例代码: 我已将 iOS 示例代码 + PHP 服务器代码上传到 drop box。这是CODE

谢谢!

【问题讨论】:

标签: ios objective-c file-upload nsurlsession nsstream


【解决方案1】:

您无法使用后台配置上传流式任务。我只在两种情况下成功上传数据:

  1. 使用存储在请求正文中的数据下载任务。
  2. 从文件上传任务。在这种情况下,您将不会收到响应正文。

【讨论】:

  • 你写的对于 iOS 7 来说是正确的。但是对于 iOS 8+,你可以使用数据任务和后台会话。
  • @Shmidt 是的,但它们不能是流数据任务(如 Apple 文档中所述):* 仅支持从文件上传任务(从数据对象或流上传将在程序退出)。
  • 抱歉,我没有注意到这是关于流的。
猜你喜欢
  • 2013-11-27
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多